[英]Make SQL query optimize to return result faster
我有一張包含數百萬條記錄的表。 我想獲取當前日期的前 10 名收入者(通過對 user_id 進行分組並添加同一用戶的earnings
字段值來計算),我為此創建了以下查詢。
SELECT user_id, SUM(earnings) AS earn
FROM statistics
WHERE created LIKE "2022-03-15%"
GROUP BY user_id
ORDER BY earn DESC
limit 10
查詢給出了預期的結果,但問題是它需要大約 90 秒來完成處理和所有操作。
是否可以對上述查詢進行任何修改,以使其在 10-15 秒或更短時間內更快地獲得結果?
WHERE created LIKE "2022-03-15%"
-->
WHERE created >= "2022-03-15"
AND created < "2022-03-15" + INTERVAL 1 DAY
前者不是“可搜索的”,因為它必須將DATETIME
轉換為字符串才能執行LIKE
。 后者很可能非常有效地使用索引idx_created_userid
。
是否可以對上述查詢進行任何修改,以使其在 10-15 秒或更短時間內更快地獲得結果?
不,您無法在查詢中更改任何內容來彌補表上索引的不足。 每次運行該查詢時,MySQL 都必須查看表中的每一行,您說的是大約 8,000,000 行。 索引使得 MySQL 只需要查看相關行的一小部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.