我有一个采集表有2200万数据 经常查询的是一天内某个设备的信号流水 现在总共有393台设备 那么我在建立b树索引时考虑过两种方案 1.为设备id建索引 2.为时间建立索引 事实结果为时间建立索引 查找数据为30s左右 大约1天4000左右的数据 为设备id建立索引 压根就查不出来 我想 这就验证了一个建索引规则 值变化较少的字段不要建立索引 那么在2200w数据里面 设备id只有393个变化 但是我无法理解为什么值少最好不建立索引 按照我理解的是 按设备id进行筛选完后 只有17w的数据 然后按时间筛选 而按时间筛选完后有100多万数据 为啥按照时间还快些 有dba大神能从数据结构方面 或者按照此情况解释索引的工作原理吗?

解决方案 »

  1.   

    你的时间是DATETIME吗? 每一秒会有100多万数据?
      

  2.   

    MYSQL在分析语句时,未必能用到你想要的索引,特别是ID这样值少的索引。
    两者的语句你最好EXPLAIN一下,
    MYSQL你可以强制使用某个索引。
      

  3.   

    现在的数据库优化器多是基于CBO的,至于优化器是否选择索引或全表扫描是依据一套模型来计算出各个执行计划的Cost,最后优化器选择出较有的执行计划
      

  4.   

    explain分析了 中了我想要的索引