[英]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 │
└───────────────┴──────────────────────────────────┘
使用同時包含日期和時間部分的TIMESTAMP
或DATETIME
單列並基於該單列進行排序,這可能會提高查詢的性能。
查詢樣例:
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.