[英]Optimizing mysql query with the proper index
我有一張1510萬記錄的表。 我正在運行以下查詢,以處理記錄以進行重復檢查。
select id, name, state, external_id
from companies
where dup_checked=0
order by name
limit 500;
當我在查詢中使用擴展說明時,它告訴我它正在使用index_companies_on_name索引,該索引僅是公司名稱的索引。 我假設這是由於訂購。 我嘗試根據名稱和dup_checked字段創建其他索引,希望它可以使用此索引,因為它可能更快,但仍使用index_companies_on_name索引。
最初它足夠快,但是現在我們只剩下330萬條記錄需要檢查,並且此查詢最多需要90秒才能執行。 我不太確定該怎么做才能使運行速度更快。 答案是其他索引還是其他我沒有想到的索引? 謝謝。
通常,這里的技巧是創建一個索引,該索引首先進行過濾,以減少行數(“基數”),然后對其進行排序:
CREATE INDEX `index_companies_on_dup_checked_name`
ON `companies` (`dup_checked`,`name`)
那應該給您您需要的范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.