簡體   English   中英

為什么 MySQL 更喜歡單個索引而不是復合索引?

[英]Why is MySQL preferring a single index over a composite index?

我目前有這個查詢:

SELECT 
    *
FROM
    (`session`)
WHERE
    (`session`.`isSale` = 0)
        AND (`session`.`createDatetime` >= (NOW() - INTERVAL 3 WEEK))
        AND (`session`.`sellerName` IS NOT NULL)
GROUP BY `session`.`id`
ORDER BY `session`.`id` DESC;

我有以下索引:

idx_createDatetime (`createDatetime` ASC)
idx_isSale (`isSale` ASC)
idx_sellerName (`sellerName` ASC)
idx_isSale_createDatetime_sellerName (`isSale` ASC, `createDatetime` ASC, `sellerName` ASC)
idx_createDatetime_isSale_sellerName (`createDatetime` ASC, `isSale` ASC, `sellerName` ASC)
idx_createDatetime_sellerName_isSale (`createDatetime` ASC, `sellerName` ASC, `isSale` ASC)

在查詢之前使用EXPLAIN進行檢查時,我發現正在使用的索引是idx_createDatetime

當有更好的索引可供使用時,MySQL 決定使用基本索引是否有特定的原因?

我一直認為這是一個錯誤。 我還沒有想出如何編寫一個好的測試用例來“證明”它。

刪除idx_isSale 然后它將使用idx_isSale_createDatetime_sellerName ,這可能是最佳的。

實際上,較窄索引的任何使用都將由較寬索引處理。

順便說一句,使用將作為范圍進行測試的列來啟動復合索引很少有用。 (也就是說,刪除最后兩個索引。)

暫無
暫無

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

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