两个简单的查询:
SELECT * FROM some_table WHERE some_column = 1
返回一个包含所有记录的数组,包括列和值,总共约100K条。完成时间大约为40毫秒。
SELECT COUNT(id) FROM some_table WHERE some_column = 1
仅返回记录计数值,与上述查询相同。需要1秒钟!!
EXPLAIN QUERY PLAN
对于两个查询告诉我同样的事情:正在使用索引搜索表...
我错过了什么?为什么获取计数比获取实际记录更慢?
我真的不想使用第一个查询,因为我只需要计数,并且获取100K条记录肯定会使用所有可用的内存:(
EXPLAIN QUERY PLAN 输出:
查询#1:
selectid order from detail
0 0 0 SEARCH TABLE atts USING INDEX idxType (type=?)
查询 #2:
selectid order from detail
0 0 0 SEARCH TABLE atts USING COVERING INDEX idxType (type=?)
EXPLAIN
的整个输出粘贴到您的问题中。此外,您之前运行过SELECT *
吗?结果可能已经在查询缓存中。这两个时间是否一致可重复? - AmberCOUNT(*)
的结果是否相同? - Amber