两个简单的查询:
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=?)
答案 0 :(得分:2)
因此,事实证明,这两个查询之间没有区别 - 因此,毫无疑问。
说到整体时间 - 显然你必须从玩具数据库转移到真实数据库。
答案 1 :(得分:1)
我想,它必须保留已经考虑过的id的内存并且还需要检查NULL条目。
如果您还没有,我建议您在some_column
上添加一个索引,以加快速度。
答案 2 :(得分:1)
整个问题是由于缓存造成的。它必须从服务器获取数据的第一个请求和第二个请求没有必要。
重新运行两个代码以交换两个查询或多次运行它们,您将知道没有区别。