SELECT COUNT(*) FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN ('0','2','21','22','27','11','31') AND `empty` = 0 LIMIT 1 [ RunTime:0.1423s ]
SELECT `id`,`webid`,`catid`,`path`,`pname`,`pathall`,`title`,`cdn`,`sort`,`likecount`,`fsize`,`time`,`viewcount`,`likecount` FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN ('0','2','21','22','27','11','31') AND `empty` = 0 ORDER BY time desc,id desc LIMIT 0,10 [ RunTime:0.0045s ]
Zwei SQL-Anweisungen, die letzte Laufzeit bedeutet Ausführungszeit, das Datenvolumen beträgt 150 W
Feldbeschreibung zhuanid ist ein numerischer Wert, webid ist ein numerischer Wert, leer ist 0 oder 1
Der von SQL im ersten Satz verwendete gemeinsame Index ist ein Satz von Indizes für zhuanid webid empty.
Der von SQL im zweiten Satz verwendete Index ist ein Satz von Indizes für zhuanid webid empty
第一句sql, limit 1
第二句sql, limit 0, 10
你让count去数150w条....还想比查看前10条快?
我的猜测:索引字段没有设置不可为空,导致 count(*) 没有使用到索引。
另外这两条语句本身并不等价,第一条针对全表,第二条不是,好像没啥可比性
要看一下你的执行计划 第一条sql结果集很大的情况下是需要扫描所有符合条件的记录的 这种情况下第二条sql走time id的索引只需要找到10条满足条件的记录即可 所以会比较快 另外zhuanid webid empty的组合索引也只会使用到zhuanid列和webid的range部分 可以修改索引顺序为zhuanid empty webid
第一条SQL执行后,结果保存在Cache.
第二条SQL执行,依赖了第一条SQL的Cache,所以会更快(其实第二条SQL用了排序,应该更慢才对).
楼主可以在第一条SQL执行完后,执行
重置Cache,然后在执行第二条SQL,结果是不一样的.