V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ksc010
V2EX  ›  问与答

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

  •  
  •   ksc010 · 2014-08-27 14:28:12 +08:00 · 8034 次点击
    这是一个创建于 3744 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据量达到百万的话
    字段 is_delete 只有 0,1两个值,有必要对其加索引吗?
    6 条回复    2014-08-28 13:25:26 +08:00
    jedywu
        1
    jedywu  
       2014-08-27 14:39:17 +08:00   ❤️ 1
    一般选择性低的字段是不需要加索引的。但实际中一些特殊的情况可能是有必要的。比如is_delete,如果为0的只有1000个,而且要经常查询为0的,那么加索引是有必要的。再比如如果一条记录很长,有100个字段,那对于查询"select c1 from tbl where is_delete = 0",为了避免每次都去做表扫描,在(is_delete, c1)上加索引也可能是需要的。
    nybux
        2
    nybux  
       2014-08-27 17:23:21 +08:00   ❤️ 1
    oracle有位图索引,mysql没必要加
    oomkiller
        3
    oomkiller  
       2014-08-27 17:25:34 +08:00   ❤️ 1
    没必要
    mahone3297
        4
    mahone3297  
       2014-08-27 17:47:09 +08:00   ❤️ 1
    is_delete 没什么必要
    但是 is_processed 很有必要。。。
    lz理解理解吧。。。
    ksc010
        5
    ksc010  
    OP
       2014-08-28 13:01:09 +08:00
    @jedywu 嗯 感觉有道理
    @mahone3297 能具体解释下吗?
    mahone3297
        6
    mahone3297  
       2014-08-28 13:25:26 +08:00   ❤️ 1
    @ksc010 其实也就是1l说的
    isProcessed的意思是,是否已处理。假如你的逻辑是每次取未处理的,然后处理下,标记成已处理。
    虽然isProcessed这个字段只有2个值true or false,但是加索引,可以让取未处理数据的效率很好的提升,所以有必要
    isDeleted的场景,我暂时想不到,所以觉得不太有必要。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3587 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:36 · PVG 12:36 · LAX 20:36 · JFK 23:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.