我让mysql解释了以下查询:
SELECT carid,pic0,bio,url,site,applet
FROM cronjob_reloaded
WHERE
carid LIKE '%bmw%'
OR
carid LIKE '%mer%'
OR
age BETWEEN '5' AND '10'
OR
category IN ('used')
ORDER BY CASE
WHEN carid LIKE '%bmw%' OR carid LIKE '%mer%' THEN 1
WHEN age BETWEEN '5' AND '10' THEN 2
ELSE 3
END 下面是解释的结果:
EXPLAIN SELECT carid, pic0, bio, url, site, applet
FROM cronjob_reloaded
WHERE carid LIKE '%bmw%'
OR carid LIKE '%mer%'
OR carid IS NOT NULL
AND age
BETWEEN '5'
AND '10'我不明白的是:

在我的表中,carid是表的主键。
发布于 2012-09-12 14:33:18
MySQL没有找到用于查询的任何索引。
查询的速度取决于CPU,对于很少行,也取决于可用RAM、系统负载和磁盘速度。您可以使用BENCHMARK多次并以更高的精度运行查询(例如,执行它100,000次,并将总时间除以100,000)。
至于索引问题:您的WHERE子句涉及carid、age、category (和间接performerid)。您应该首先在category上进行索引(因为您要求对它进行直接匹配)、age,最后是carid。
CREATE INDEX test_index ON cronjob_reloaded ( category, age, carid );这汇集了MySQL在单个索引操作中查询的WHERE阶段所需的大部分信息。
添加performerid可能会加快速度,也可能不会,这取决于几个因素。我会在没有的情况下开始,以后再测试。
更新:原来的查询似乎已经改变了,不再出现performerid了。
最后,1000行通常只需要很少的时间,以至于MySQL甚至可能决定根本不使用索引,因为加载所有数据并让WHERE自己排序更快。
发布于 2012-09-12 14:27:08
根据文件:
“如果key为NULL,MySQL找不到更有效地执行查询的索引。”
有关它的正式文件,请参阅下面的链接。
编辑:
以下是索引的链接
希望能帮上忙!
https://stackoverflow.com/questions/12390373
复制相似问题