我最近发现了如何从EXPLAIN为SQL提供的信息中获益,我想我应该通过EXPLAIN子句运行所有查询,看看我是否有未经优化的东西。原来我有,我不知道该怎么做..
如果我解释此查询
SELECT `id`,`username`,`first_name`,`last_name`
FROM `users`
WHERE (`username` LIKE '%kelon%'
OR `email` LIKE '%kelon%'
OR `first_name` LIKE '%kelon%'
OR `last_name` LIKE '%kelon%'
OR `facebook` LIKE '%kelon%'
OR `twitter` LIKE '%kelon%'
OR `skype` LIKE '%kelon%')
我为ALL
得到type
,这显然是最糟糕的情况,即使我在所有列上都有索引,我也会NULL
获得possible_keys
。如何优化这个混乱的查询,以便在几百万条记录的情况下mysql不会逃跑?
答案 0 :(得分:1)
在我看来,答案可能是拥有FULLTEXT索引。
但是考虑到你的桌子目前是InnoDB,你的托管服务提供商目前支持MySQL版本5.5,我只能想到这些选项:
您也可以尝试这一点,看看它是否有任何好处:
SELECT `id`,`username`,`first_name`,`last_name`
FROM `users`
WHERE (
`username` LIKE 'kelon%'
OR `email` LIKE 'kelon%'
OR `first_name` LIKE 'kelon%'
OR `last_name` LIKE 'kelon%'
OR `facebook` LIKE 'kelon%'
OR `twitter` LIKE 'kelon%'
OR `skype` LIKE 'kelon%'
OR `username` LIKE '%kelon%'
OR `email` LIKE '%kelon%'
OR `first_name` LIKE '%kelon%'
OR `last_name` LIKE '%kelon%'
OR `facebook` LIKE '%kelon%'
OR `twitter` LIKE '%kelon%'
OR `skype` LIKE '%kelon%'
)
链接:
What to do with MySQL Full Text Search while migrating to Innodb ?
What are the main differences between InnoDB and MyISAM ?