我在我们的遗留系统中编写了一个查询。(使用MySQL 5.5),随着数据的增长,下面提到的查询花费了大量的时间。在我们的系统中,大约有2,000,000,000 (20亿行)大约650 GB的数据。表相对于每天都进行分区。(这意味着上面的查询是从30个分区获取数据)。
将16 to分配给innodb_buffer_pool_size。
查询-1
SELECT *
FROM
( SELECT a,b,c,d,e,f,g,h,i,j,k,l
FROM TEST
WHERE START_TIME between '2013-11-14 00:00:01' and '2013-12-14 23:59:59'
ORDER BY START_TIME DESC
) as TEST_DATA
LIMIT 10000;上面的查询=>是指选择所有数据的所有列,从一个月到执行排序,最后向最终用户显示10000条记录。
现在,我的疑问是:查询-2
SELECT a,b,c,d,e,f,g,h,i,j,k,l
FROM TEST
WHERE START_TIME between '2013-11-14 00:00:01' and '2013-12-14 23:59:59'
ORDER BY START_TIME DESC
limit 10000;上面的查询=>从一个月的数据中选择所有列,并执行排序,并在10000条记录排序后立即显示结果。(不对所有记录进行分类和缓冲)。
我们有关于START_TIME的索引。
使用Query-1和Query-2 ->,这两个查询会显示不同的结果集吗?还是一样的?
因为在查询-1中,我们对所有记录进行排序,然后显示10k,而在查询-2中,我们显示10k排序记录。
非常感谢你的帮助。
发布于 2014-01-07 18:15:03
看差别
这两个查询都将显示相同的结果,但第二个查询将减少工作量和完成较少的处理。
https://dba.stackexchange.com/questions/56272
复制相似问题