Секционирование по списку ключей LIST в MYSQL
Сейчас "упёрся" в секции таблиц mysql. Уже как ни пробовал - ни хочет база принимать мой "наверное" корявый код. Дело простое - хочу разбить (создать) таблицу с логин, email с секциями согласно алфавита. Пытаюсь облегчить поиск. То есть каждая PARTITION соответствует знаку/букве и тогда писк происходит в этой "секции". Согласно справке oracle это так легко... oracle
--виртуальный столбец
CREATE TABLE AIF.AGREEM (ISN NUMBER,UPDATED DATE, J
PARTID AS (TO_NUMBER(TO_CHAR(UPDATED, ’ ’)))
) PARTITION BY LIST(PARTID)
( PARTITION PART_1 VALUES (1),
PARTITION PART_2 VALUES (2),
PARTITION PART_12 VALUES (12));
Смотря на это - я наваял:
CREATE TABLE `addresses` (
`id` char(2) NOT NULL,
`login` varchar(50) NOT NULL,
`email` int NOT NULL,
KEY `id` (`login`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE COLUMNS(id,login)
(
PARTITION p0 VALUES LESS THAN ('0','0') ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN ('1','1') ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN ('2','2') ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN ('3','3') ENGINE = InnoDB,
PARTITION p4 VALUES LESS THAN ('4','4') ENGINE = InnoDB,
PARTITION p5 VALUES LESS THAN ('5','5') ENGINE = InnoDB,
PARTITION p6 VALUES LESS THAN ('6','6') ENGINE = InnoDB,
PARTITION p7 VALUES LESS THAN ('7','7') ENGINE = InnoDB,
PARTITION p8 VALUES LESS THAN ('8','8') ENGINE = InnoDB,
PARTITION p9 VALUES LESS THAN ('9','9') ENGINE = InnoDB,
PARTITION pA VALUES LESS THAN ('A','A') ENGINE = InnoDB,
PARTITION pB VALUES LESS THAN ('B','B') ENGINE = InnoDB,
PARTITION pC VALUES LESS THAN ('C','C') ENGINE = InnoDB,
PARTITION pD VALUES LESS THAN ('D','D') ENGINE = InnoDB,
PARTITION pE VALUES LESS THAN ('E','E') ENGINE = InnoDB,
PARTITION pF VALUES LESS THAN ('F','F') ENGINE = InnoDB,
PARTITION pG VALUES LESS THAN ('G','G') ENGINE = InnoDB,
PARTITION pH VALUES LESS THAN ('H','H') ENGINE = InnoDB,
PARTITION pJ VALUES LESS THAN ('J','J') ENGINE = InnoDB,
PARTITION pI VALUES LESS THAN ('I','I') ENGINE = InnoDB,
PARTITION pK VALUES LESS THAN ('K','K') ENGINE = InnoDB,
PARTITION pL VALUES LESS THAN ('L','L') ENGINE = InnoDB,
PARTITION pM VALUES LESS THAN ('M','M') ENGINE = InnoDB,
PARTITION pN VALUES LESS THAN ('N','N') ENGINE = InnoDB,
PARTITION pO VALUES LESS THAN ('O','O') ENGINE = InnoDB,
PARTITION pP VALUES LESS THAN ('P','P') ENGINE = InnoDB,
PARTITION pQ VALUES LESS THAN ('Q','Q') ENGINE = InnoDB,
PARTITION pR VALUES LESS THAN ('R','R') ENGINE = InnoDB,
PARTITION pS VALUES LESS THAN ('S','S') ENGINE = InnoDB,
PARTITION pT VALUES LESS THAN ('T','T') ENGINE = InnoDB,
PARTITION pU VALUES LESS THAN ('U','U') ENGINE = InnoDB,
PARTITION pV VALUES LESS THAN ('V','V') ENGINE = InnoDB,
PARTITION pW VALUES LESS THAN ('W','W') ENGINE = InnoDB,
PARTITION pX VALUES LESS THAN ('X','X') ENGINE = InnoDB,
PARTITION pY VALUES LESS THAN ('Y','Y') ENGINE = InnoDB,
PARTITION pZ VALUES LESS THAN ('Z','Z') ENGINE = InnoDB
);
подскажите - в чем я туплю? я уже горы инфы прочитал, но ни как не могу определить под себя. InnoDB - не чувствительна к регистру, потому буквы все равно какие. Я уже подумывал о создании отдельных таблиц на каждый знак...
Заранее всем спасибо
Ответы (1 шт):
Оказывается я шёл не в том направлении.
Хотел сделать секционирование таблицы, чтобы увеличить скорость ответа базы. Оказалось все тривиально просто. В моём запросе PHP к базе данных было:
$sql="SELECT*FROM`addresses`WHERE`address`LIKE'%".$value."%'";
Как бы всё правильноь, но сегодня, перечитав очередную часть информации по форумам в обсуждении MySQL, наткнулся на подобный запрос. Форумчанин озвучил, что его "отклик" происходит за 0,03 сек. Тут я и призадумался. Оказывается все крылось в самом запросе. Изменил его:
... LIKE'%".$value."%'" на ... LIKE'".$value."'"
И время запроса составило 0,02 сек.
Более недели потратил на изучение партицирования/секционирования таблиц и перед этим всем уже искал альтернативу MySQL.