首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用索引的查询

问不使用索引的查询
EN

Stack Overflow用户
提问于 2021-03-04 14:35:49
回答 1查看 24关注 0票数 0

我有两张桌子,用户和产品。在用户中有4个用户,产品有一个fk到用户(列user_id)。

在产品中有2395288条记录,其中765277条为user_id = 4。

如果我没有索引的话

从user_id =4的产品中解释select *;

我得到了

​

​

所以,我增加了一个索引

在产品上创建索引用户ON (User_id)

之后,我又执行了一次,但是索引不起作用:

从user_id =4的产品中解释select *;

​

​

只有当我选择count(*)或选择user_id时才有效

​

​

但是我需要索引来选择*或者选择名称,对产品的描述,其中user_id =x

EN

回答 1

Stack Overflow用户

发布于 2021-03-04 14:47:30

通常,MySQL的优化器认为,如果您搜索该列中常见的值(例如,超过20%的行与该值匹配),则它决定不使用该索引,因为在索引中查找值,然后再进行另一次查找以获得找到该值的行是更多的工作。

20%的阈值不是一个官方的断点,它只是我观察到的。

如果你认为优化器做错了选择,你可以给它一个索引提示来说服它,一个表格扫描是更昂贵的。

代码语言:javascript
复制
select ... from products FORCE INDEX(userid) where user_id = 4;

我只在必要时尝试使用索引提示。通常,MySQL优化器在没有提示的情况下做出正确的选择。此外,使用索引提示意味着我的查询现在与该索引绑定在一起,因此如果我想在某一天删除索引,则需要首先更改查询。

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

https://stackoverflow.com/questions/66477190

复制
相关文章

相似问题

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