Фоновая: У меня есть 8 миллионов записей, и я хочу, чтобы ускорить время запроса, это мой столMYSQL Partition избежать полного сканирования таблицы
CREATE TABLE vehiclelog3 (
ID INT(100) NOT NULL AUTO_INCREMENT,
`PNumber` VARCHAR(30) DEFAULT NULL,
`Date` DATE DEFAULT NULL,
`Time` TIME DEFAULT NULL,
`Offset` VARCHAR(45) DEFAULT NULL,
`Street1` VARCHAR(60) DEFAULT NULL,
`Street2` VARCHAR(60) DEFAULT NULL,
`City` VARCHAR(60) DEFAULT NULL,
`Region` VARCHAR(60) DEFAULT NULL,
ect...
PRIMARY KEY (`ID`,`Date`),
UNIQUE KEY ID (`ID`,`Date`),
KEY date (`Date`),
KEY plate (`PNumber`)
) ENGINE=INNODB
PARTITION BY HASH(MONTH(`Date`))
PARTITIONS 12;
Моя проблема в том, что я хочу, чтобы избежать полного сканирования в таблице, например, если мой запрос как
EXPLAIN PARTITIONS Select * from vehiclelog3 where PNumber = "bla" and Date = "2014-01-18"
выход:
1 SIMPLE vehiclelog3 p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12 index (NULL) PRIMARY 7 (NULL) 3346217 Using where
я просто хочу, чтобы сканировать только раздел, который есть что Даты а. Является ли это возможным?
Я использовал ваши 'create' и' select', и запрос касался только одного раздела, как и предполагалось. Не могли бы вы опубликовать не усеченную версию запроса на создание и реальный запрос выбора (в вашем элементе есть столбец 'plate', который является ключом, а не столбцом в создании)? –
О! Извините за это, я редактирую табличку в PNumber в запросе Select. – zero