需要帮助优化一个
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
问题是,这个查询没有使用索引.
有没有办法强迫它使用一个?