首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用order by和limit by子句优化mysql查询

问使用order by和limit by子句优化mysql查询
EN

Stack Overflow用户
提问于 2014-07-04 19:01:17
回答 1查看 221关注 0票数 0

我有一个包含成员审计信息的表。

我有一个查询,比如:

代码语言:javascript
复制
select columnsname from tablename 
where member id =? 
order by audit_date desc, audit_time desc 
limit 0,150

执行此查询需要很长时间。我要查询的表包含大约20到30亿条记录。

我不能删除order by子句,因为我希望按照审计日期和审计时间的降序进行记录。我也不能删除limit by子句,因为我需要分页功能。

我已经对成员id、audit_date和audit_time应用了索引。

有没有人可以帮助我优化这个查询,或者建议我可以在Java层中应用的其他方法来实现这个功能?

下面是我的explain输出。左侧是列名,右侧是列名的值。

代码语言:javascript
复制
┌───────────────┬──────────────────────────────────┐
│ Column Name   │ Column Value                     │
├───────────────┼──────────────────────────────────┤
│ ID            │ 1                                │
│ Select Type   │ simple                           │
│ table         │ member_audit_info                │
│ type          │ ref                              │
│ possible_keys │ member_audit_info_memebrid_index │
│ key           │ member_audit_info_memebrid_index │
│ ref           │ const                            │
│ rows          │ 208988                           │
│ extra         │ Using where,Using filesort       │
└───────────────┴──────────────────────────────────┘
EN

回答 1

Stack Overflow用户

发布于 2014-07-05 17:23:07

使用同时包含日期和时间部分的单列TIMESTAMP或DATETIME,并基于该单列进行排序,这可能会提高查询的性能。

示例查询:

代码语言:javascript
复制
select columnsname from tablename 
where member_id =? 
order by audit_timestamp desc 
limit 0,150

注释:(关于查询性能的更多要点)

此限制列大小应为indexed.

  • fetch required columns

  • reduce
  • (pagination size)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24572836

复制
相关文章

相似问题

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