mysql – 使用in运算符会影响索引的使用吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 使用in运算符会影响索引的使用吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2111字,纯文字阅读大概需要4分钟。
内容图文
使用in运算符会影响索引的使用吗?例如,WHERE id IN(10)是否可能导致优化器忽略索引?
具体来说,我试图从StackOverflow了解this answer.问题是为什么没有使用索引(在MySQL中),答案表明它可能是因为只使用了一个值.例如,WHERE id IN(10)可能会忽略索引,而WHERE id = 10则可以.
我简要地浏览了一下谷歌,并浏览了一些MySQL文档,但我找不到任何影响优化器决定使用索引的参考.既不是单个值,也不是多个值.
假设IN值与它们所比较的列的数据类型相同,它们是否会影响索引的使用?
我链接的问题是针对MySQL的,但我在其他数据库中工作,所以我有兴趣知道这是否是关于索引的通用事项,或者它是否是MySQL的怪癖.
解决方法:
如果在MySQL中发生这种情况,那么对MySQL来说这是一个怪癖.既然你问过其他数据库我也决定在我的postgres数据库上测试一下.在具有超过7000万行的表上,它为以下两个查询(使用索引)生成完全相同的解释:
explain select * from myschema.my_list where my_column in (232);
explain select * from myschema.my_list where my_column = 232;
这是:
'Bitmap Heap Scan on my_list (cost=68093.11..4109456.90 rows=1656844 width=994)'
' Recheck Cond: (my_column = 232)'
' -> Bitmap Index Scan on my_list_2 (cost=0.00..67678.90 rows=1656844 width=0)'
' Index Cond: (my_column = 232)'
在我在列表中添加多个元素之前,它不会分歧:
explain select * from myschema.my_list where my_column in (232,79);
explain select * from myschema.my_list where my_column = 232 or my_column = 79;
这是(分别):
'Bitmap Heap Scan on my_list (cost=172208.28..7050980.15 rows=4290987 width=994)'
' Recheck Cond: (my_column = ANY ('{232,79}'::integer[]))'
' -> Bitmap Index Scan on my_list_2 (cost=0.00..171135.53 rows=4290987 width=0)'
' Index Cond: (my_column = ANY ('{232,79}'::integer[]))'
'Bitmap Heap Scan on my_list (cost=177390.73..7066890.07 rows=4230402 width=994)'
' Recheck Cond: ((my_column = 232) OR (my_column = 79))'
' -> BitmapOr (cost=177390.73..177390.73 rows=4290987 width=0)'
' -> Bitmap Index Scan on my_list_2 (cost=0.00..67678.90 rows=1656844 width=0)'
' Index Cond: (my_column = 232)'
' -> Bitmap Index Scan on my_list_2 (cost=0.00..107596.63 rows=2634142 width=0)'
' Index Cond: (my_column = 79)'
我会用一粒盐来回答他的答案.
内容总结
以上是互联网集市为您收集整理的mysql – 使用in运算符会影响索引的使用吗?全部内容,希望文章能够帮你解决mysql – 使用in运算符会影响索引的使用吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。