请教一个 sql 查询效率问题

2022-03-23 16:49:20 +08:00
 pennai
如果对某加了 unique 索引的字段、或者主键字段查询,暂定字段名为 fieldA ,数据类型为数字,不回表的情况下,
where fieldA in (1)

where fieldA = 1 ,
两种查询效率上是否会有区别?
1886 次点击
所在节点    MySQL
11 条回复
byx
2022-03-23 17:09:52 +08:00
没区别,可以 EXPLAIN 看一下
Red998
2022-03-23 17:44:28 +08:00
推荐 where filedA =1 limit 1
hidemyself
2022-03-23 18:02:04 +08:00
没区别
pennai
2022-03-23 18:57:46 +08:00
@redorblacck886 学到了
pennai
2022-03-23 19:40:59 +08:00
@byx 感谢,explain 发现确实执行计划是一样的,即使不是 unique key 也是
xuanbg
2022-03-23 19:50:07 +08:00
unique 不过是数据 100%分散,索引的效能最大而已。扯到这个,就不得不提一个极端的例子:一个 bit 类型的字段,要不要建索引?
我认为要看情况,如果 0/1 分布是均匀的,建索引就 P 用没有。如果这是个状态字段,所有的 0 都会变成 1 ,而且经常要查询值为 0 的数据,那索引的效能还是相当大的,非常值得建立索引。
pennai
2022-03-23 20:53:09 +08:00
@xuanbg 索引倒也不是只有查询用,Oracle 也有位图索引,正是你说的一个 bit 类型的索引,运算上性能很好
zmal
2022-03-24 13:28:16 +08:00
myql 有个配置是 in 里多少个值不走索引。比较多的话会全表扫描。
pennai
2022-03-24 14:59:39 +08:00
@zmal 谢谢,我去学习一个
Pythoner666666
2022-03-24 15:57:59 +08:00
@redorblacck886 主键 或者 unique 不需要加 limit = 1 吧
mikejson
2022-03-24 16:35:25 +08:00
@Pythoner666666 有道理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842399

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX