Как разделить таблицу MySQL на основе столбца char?
Можно ли разделить на основе столбца char?
После просмотра документации по MySQL 5.1 выясняется, что могут использоваться только целочисленные типы.
Это правильно? Или я могу использовать некоторую функцию для преобразования символа в целое число?
Поле char, о котором идет речь, содержит уникальный идентификатор.
2 ответа
Разбиение в MySQL 5.1 может иметь дело только с целочисленными столбцами ( Source). Вы можете использовать только несколько функций разбиения на нецелые столбцы. Например:
CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
ENGINE=INNODB
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
Вы также можете использовать разделение ключей в MySQL 5.1, если первичный ключ включает все столбцы в функции разделения таблицы:
CREATE TABLE k1 (
id CHAR(3) NOT NULL PRIMARY KEY,
value int
)
PARTITION BY KEY(id)
PARTITIONS 10;
С другой стороны, в MySQL 5.5 вы можете использовать разбиение столбцов по диапазонам или разделение по спискам в самых разных типах данных, включая символьные столбцы.
Пример столбцов списка:
CREATE TABLE expenses (
expense_date DATE NOT NULL,
category VARCHAR(30),
amount DECIMAL (10,3)
);
ALTER TABLE expenses
PARTITION BY LIST COLUMNS (category)
(
PARTITION p01 VALUES IN ('lodging', 'food'),
PARTITION p02 VALUES IN ('flights', 'ground transportation'),
PARTITION p03 VALUES IN ('leisure', 'customer entertainment'),
PARTITION p04 VALUES IN ('communications'),
PARTITION p05 VALUES IN ('fees')
);
Пример столбцов диапазона:
CREATE TABLE range_test (
code CHAR(3),
value INT
)
PARTITION BY RANGE COLUMNS(code) (
PARTITION p0 VALUES LESS THAN ('MMM'),
PARTITION p1 VALUES LESS THAN ('ZZZ')
);
Дальнейшее чтение:
Что вы надеетесь получить от PARTITIONing? HASH и LIST вряд ли обеспечат какой-либо прирост производительности. Редко полезно разбить таблицу на менее чем миллион строк.
Другие комментарии по разделу: http://mysql.rjweb.org/doc.php/partitionmaint
5.6 и 5.7 ослабили некоторые ограничения, упомянутые в других ответах, но разделение редко бывает лучше индексации.