关于b树索引的原理问题

syw1020123 2018-05-30 08:51:03
我有一个采集表有2200万数据 经常查询的是一天内某个设备的信号流水 现在总共有393台设备 那么我在建立b树索引时考虑过两种方案 1.为设备id建索引 2.为时间建立索引 事实结果为时间建立索引 查找数据为30s左右 大约1天4000左右的数据 为设备id建立索引 压根就查不出来 我想 这就验证了一个建索引规则 值变化较少的字段不要建立索引 那么在2200w数据里面 设备id只有393个变化 但是我无法理解为什么值少最好不建立索引 按照我理解的是 按设备id进行筛选完后 只有17w的数据 然后按时间筛选 而按时间筛选完后有100多万数据 为啥按照时间还快些 有dba大神能从数据结构方面 或者按照此情况解释索引的工作原理吗?
...全文
1307 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
syw1020123 2018-05-31
  • 打赏
  • 举报
回复
引用 2楼trainee 的回复:
MYSQL在分析语句时,未必能用到你想要的索引,特别是ID这样值少的索引。 两者的语句你最好EXPLAIN一下, MYSQL你可以强制使用某个索引。
explain分析了 中了我想要的索引
syw1020123 2018-05-31
  • 打赏
  • 举报
回复
引用 1楼trainee 的回复:
你的时间是DATETIME吗? 每一秒会有100多万数据?
通过时间先筛选 筛选完就是一天的393台设备的数据100多万
sych888 2018-05-31
  • 打赏
  • 举报
回复
现在的数据库优化器多是基于CBO的,至于优化器是否选择索引或全表扫描是依据一套模型来计算出各个执行计划的Cost,最后优化器选择出较有的执行计划
sych888 2018-05-31
  • 打赏
  • 举报
回复
通常索引扫描是离散的单块读,而全表扫描是多块读,若是读取的数据比较多,计算的结果很大的可能是全表扫描消耗的IO更少
sych888 2018-05-31
  • 打赏
  • 举报
回复
建立索引的目的是提高查询效率,前提条件是索引列具有高选择性。索引不一定是单例的,也可以多列,来建立组合索引;有时单例的选择性不高,而多列的选择性可能会比较高
trainee 2018-05-31
  • 打赏
  • 举报
回复
MYSQL在分析语句时,未必能用到你想要的索引,特别是ID这样值少的索引。 两者的语句你最好EXPLAIN一下, MYSQL你可以强制使用某个索引。
trainee 2018-05-31
  • 打赏
  • 举报
回复
你的时间是DATETIME吗? 每一秒会有100多万数据?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧