我在遗留系统中编写了1个查询。 (使用MySQL 5.5) 现在,随着数据的增长 - 下面提到的查询花费了大量时间。 在我们的系统中,我们有200,000,00,000(20亿行),大约650 GB的数据。 表每天都是分区的。 (这意味着上面的查询是从30个分区中获取数据)。
将16GB分配给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;
以上查询=>意味着在1个月之间为所有数据选择所有列并执行排序,最后向最终用户显示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;
以上查询=>从1个月的数据中选择所有列并执行排序并在10000个记录排序后立即显示结果。 (不对所有记录进行排序和缓冲)。
使用Query-1和Query-2 - >这两个查询是否会显示不同的结果集?还是一样?
因为在Query-1中,我们对所有记录进行排序,然后显示10k 而在Query-2中,我们显示10k个排序记录。
非常感谢你的帮助。