我有一个简单的选择查询:
SELECT *
FROM `inventory`
WHERE account_id = "1"
AND marketplace_id = "2"
AND sku = "3"
AND `date` = "4"它在四个领域都有一个条件,因此,自然指数就是这四个领域中的一个。
我有以下索引:

当我解释这个问题时,我得到:

说它是使用列表中的第二种索引,而不是第三种或第四种。
如果我在查询中使用USE INDEX(account_id__marketplace_id__sku__date),它将成功地使用它,并过滤100%。
我已经尝试过ANALYZE TABLE和OPTIMIZE TABLE来重建索引,但是情况还是一样!
根据我对其他表的经验,如果我现在删除索引2和3,并重新创建它们,那么最大的索引按顺序排列,查询将选择该索引,这意味着,它将选择匹配最大匹配的第一个索引。
发布于 2020-03-27 06:01:26
Mysql将根据表的数据大小选择索引;

您可以尝试在库存中插入600000条记录,随机保存记录的值,并运行“解释”
发布于 2020-03-26 11:22:25
您的示例代码有:
date = "1"这是非常神秘的,因为"1“不是有效的日期。我注意到没有索引使用date。我猜您有一个类型转换问题--转换类型(和函数调用)可以阻止索引的使用。
我可以肯定的是,所有被比较的东西都是正确的。
https://stackoverflow.com/questions/60864799
复制相似问题