首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL没有使用最佳索引

MySQL没有使用最佳索引
EN

Stack Overflow用户
提问于 2020-03-26 10:04:22
回答 2查看 145关注 0票数 2

我有一个简单的选择查询:

代码语言:javascript
复制
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 TABLEOPTIMIZE TABLE来重建索引,但是情况还是一样!

根据我对其他表的经验,如果我现在删除索引2和3,并重新创建它们,那么最大的索引按顺序排列,查询将选择该索引,这意味着,它将选择匹配最大匹配的第一个索引。

  • MySQL服务器版本:5.7.25-google-log
  • phpMyAdmin MySQL客户端版本:5.5.59
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-27 06:01:26

Mysql将根据表的数据大小选择索引;

您可以尝试在库存中插入600000条记录,随机保存记录的值,并运行“解释”

票数 1
EN

Stack Overflow用户

发布于 2020-03-26 11:22:25

您的示例代码有:

代码语言:javascript
复制
date = "1"

这是非常神秘的,因为"1“不是有效的日期。我注意到没有索引使用date。我猜您有一个类型转换问题--转换类型(和函数调用)可以阻止索引的使用。

我可以肯定的是,所有被比较的东西都是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60864799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档