簡體   English   中英

使用order by和limit by子句進行mysql查詢優化

[英]mysql query optimization with order by and limit by clause

我有一張包含會員的審核信息的表。

我有一個查詢,如:

select columnsname from tablename 
where member id =? 
order by audit_date desc, audit_time desc 
limit 0,150

該查詢需要很長時間才能執行。 我正在查詢的表包含大約2到30億條記錄。

我無法刪除order by子句,因為我想要按審計日期和審計時間的降序記錄。 我也無法刪除by子句的限制,因為我需要分頁功能。

我已經在成員ID,audit_date和audit_time上應用了索引。

有誰能幫助我優化此查詢,或者建議我可以在Java層中應用的任何其他方法來實現此功能?

下面是我的解釋輸出。 左側是列名,右側是值。

┌───────────────┬──────────────────────────────────┐
│ 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       │
└───────────────┴──────────────────────────────────┘

使用同時包含日期和時間部分的TIMESTAMPDATETIME單列並基於該單列進行排序,這可能會提高查詢的性能。

查詢樣例:

select columnsname from tablename 
where member_id =? 
order by audit_timestamp desc 
limit 0,150

注意:( 關於查詢性能的幾點說明

  • member id應該建立索引。
  • 僅獲取必需的列
  • 減小限制 (分頁大小)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM