mysql 中对于“基数”很少的字段有必要加索引吗?

2014-08-27 14:28:12 +08:00
 ksc010
数据量达到百万的话
字段 is_delete 只有 0,1两个值,有必要对其加索引吗?
8071 次点击
所在节点    问与答
6 条回复
jedywu
2014-08-27 14:39:17 +08:00
一般选择性低的字段是不需要加索引的。但实际中一些特殊的情况可能是有必要的。比如is_delete,如果为0的只有1000个,而且要经常查询为0的,那么加索引是有必要的。再比如如果一条记录很长,有100个字段,那对于查询"select c1 from tbl where is_delete = 0",为了避免每次都去做表扫描,在(is_delete, c1)上加索引也可能是需要的。
nybux
2014-08-27 17:23:21 +08:00
oracle有位图索引,mysql没必要加
oomkiller
2014-08-27 17:25:34 +08:00
没必要
mahone3297
2014-08-27 17:47:09 +08:00
is_delete 没什么必要
但是 is_processed 很有必要。。。
lz理解理解吧。。。
ksc010
2014-08-28 13:01:09 +08:00
@jedywu 嗯 感觉有道理
@mahone3297 能具体解释下吗?
mahone3297
2014-08-28 13:25:26 +08:00
@ksc010 其实也就是1l说的
isProcessed的意思是,是否已处理。假如你的逻辑是每次取未处理的,然后处理下,标记成已处理。
虽然isProcessed这个字段只有2个值true or false,但是加索引,可以让取未处理数据的效率很好的提升,所以有必要
isDeleted的场景,我暂时想不到,所以觉得不太有必要。

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

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

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

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

© 2021 V2EX