Подстановочный знак в крайнем левом столбце составного индекса означает, что оставшиеся столбцы в индексе не используются при поиске индекса (MySQL)?
Представьте, что у вас есть основной составной индексlast_name,first_name
, Затем вы выполнили поискWHERE first_name LIKE 'joh%' AND last_name LIKE 'smi%'
.
Означает ли подстановочный знак, используемый в условии last_name, что условие first_name не будет использоваться для дальнейшей помощи MySQL в поиске индексов? Другими словами, помещая подстановочный знак в условие last_name, MySQL будет выполнять только частичный поиск индекса (и игнорирует условия, заданные в столбцах справа от last_name)?
Дальнейшее уточнение того, что я спрашиваю
Пример 1: первичный ключlast_name, first_name
.
Пример 2: первичный ключlast_name
.
Используя это предложение WHERE:WHERE first_name LIKE 'joh%' AND last_name LIKE 'smi%'
Пример-1 будет быстрее, чем Пример-2?
Обновить
Вот sqlfiddle:http://sqlfiddle.com/#!9/6e0154/3
CREATE TABLE `people1` (
`id` INT(11),
`first_name` VARCHAR(255) NOT NULL,
`middle_name` VARCHAR(255) NOT NULL,
`last_name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
INDEX `name` (`last_name`(15), `first_name`(10))
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
CREATE TABLE `people2` (
`id` INT(11),
`first_name` VARCHAR(255) NOT NULL,
`middle_name` VARCHAR(255) NOT NULL,
`last_name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
INDEX `name` (`last_name`(15))
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
INSERT INTO `people1` VALUES
(1,'John','','Smith'),(2,'Joe','','Smith'),(3,'Tom','','Smith'),(4,'George','','Washington');
INSERT INTO `people2` VALUES
(1,'John','','Smith'),(2,'Joe','','Smith'),(3,'Tom','','Smith'),(4,'George','','Washington');
# Query 1A
EXPLAIN SELECT * FROM `people1` WHERE `first_name` LIKE 'joh%' AND `last_name` LIKE 'smi%';
# Query 1B
EXPLAIN SELECT * FROM `people1` WHERE `first_name` LIKE 'joh%' AND `last_name` LIKE 'john';
# Query 2A
EXPLAIN SELECT * FROM `people2` WHERE `first_name` LIKE 'joh%' AND `last_name` LIKE 'smi%';
# Query 2B
EXPLAIN SELECT * FROM `people2` WHERE `first_name` LIKE 'joh%' AND `last_name` LIKE 'john';