Вам нужна ваша помощь в оптимизации одного запроса mysql. Например, возьмем простую таблицу.
CREATE TABLE `Modules` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`moduleName` varchar(100) NOT NULL,
`menuName` varchar(255) NOT NULL,
PRIMARY KEY (`ID`),
KEY `moduleName` (`moduleName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Позволяет заполнить его некоторыми данными:
INSERT INTO `Modules` (`moduleName` ,`menuName`)
VALUES
('abc1', 'name1'),
('abc', 'name2'),
('ddf', 'name3'),
('ccc', 'name4'),
('fer', 'name5');
И пример строки. Пусть это будет abc_def
;
Традиционно мы пытаемся найти все строки, содержащие строку поиска.
Наоборот, моя задача - найти все строки, содержащие moduleName
в строке ввода. На данный момент у меня есть следующий запрос для получения желаемого результата:
SELECT `moduleName` ,`menuName`
FROM `Modules`
WHERE 'abc_def' LIKE(CONCAT(`moduleName`,'%'))
Это вернет
moduleName | menuName
---------------------------
abc | name2
Проблема заключается в том, что этот запрос не использует индекс.
Есть ли способ заставить его использовать его?