首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询结果集

查询结果集
EN

Database Administration用户
提问于 2014-01-07 14:16:08
回答 1查看 137关注 0票数 1

我在我们的遗留系统中编写了一个查询。(使用MySQL 5.5),随着数据的增长,下面提到的查询花费了大量的时间。在我们的系统中,大约有2,000,000,000 (20亿行)大约650 GB的数据。表相对于每天都进行分区。(这意味着上面的查询是从30个分区获取数据)。

将16 to分配给innodb_buffer_pool_size。

查询-1

代码语言:javascript
复制
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

代码语言:javascript
复制
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排序记录。

非常感谢你的帮助。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-01-07 18:15:03

看差别

  • 第一个查询有一个子查询,该子查询将对START_TIME索引进行索引扫描,该索引可能返回超过10,000 rows.Then,必须从其中剔除10,000行才能产生结果。
  • 第二个查询将执行索引扫描,并不超过10,000行。

这两个查询都将显示相同的结果,但第二个查询将减少工作量和完成较少的处理。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/56272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档