【发布时间】:2013-10-10 22:15:03
【问题描述】:
我最近发现了如何从 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在几百万条记录的情况下不会跑掉?
【问题讨论】:
-
@Uours 好吧,我不能有一个常量前缀,因为这是我正在搜索的用户输入的数据,我不能进行全文搜索,因为 InnoDB 不支持全文。这是否意味着没有什么可以做的?
-
@Uours 不幸的是,我的托管服务提供商支持版本 5.5.something
QQ -
这在使用
LIKE搜索时永远不会表现良好。请参阅我的演示文稿Full Text Search Throwdown。