为什么后续查询需要在mysql中花费这么多时间而不是在oracle
中select * from (select * from employee) as a limit 1000
我在oracle和MySQL数据库中使用此表中的50,00,000条记录测试此查询。
我知道这些查询应该像
一样写select * from employee limit 1000
但是用于显示数据&我们的自定义动态网格中没有行的总数我们只有一个查询,我们使用简单的select * from employee
查询,然后添加限制或其他条件。
我们缩短了这个问题。
但我的问题是“为什么mysql中的这种查询需要花费太多时间?”
答案 0 :(得分:0)
好吧,因为要执行此查询,MySQL必须遍历表中的所有50K行,将它们复制到临时表(在内存或磁盘上,具体取决于大小),然后取出前1000个。
在MySQL中,如果要使用LIMIT
优化查询,则需要遵循一些阻止扫描完整数据集的做法(主要是排序列的索引)。
见这里:http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html