索引优化策略

索引类型
1. B-tree 索引
   : 名叫 btree 索引 , 大的方面看 , 都用的平衡树 , 但具体的实现上 , 各引擎稍有不同 ,
比如 , 严格的说 ,NDB 引擎 , 使用的是 T-tree
  Myisam,innodb , 默认用 B-tree 索引
 
但抽象一下 ---B-tree 系统 , 可理解为 排好序的快速查找结构 .  
 
2 hash 索引
  memory 表里 , 默认是 hash 索引 , hash 的理论查询时间复杂度为 O(1)
hash 函数计算后的结果 , 是随机的 , 如果是在磁盘上放置数据 ,
比主键为 id 为例 , 那么随着 id 的增长 , id 对应的行 , 在磁盘上随机放置 .

左前缀原则
在多列上建立索引后 , 查询哪个列 , 索引都将发挥作用
: 多列索引上 , 索引发挥作用 , 需要满足左前缀要求 .
index(a,b,c) 为例 ,
语句 索引是否发挥作用
Where a=3 是,只使用了a列
Where a=3 and b=5 是,使用了a,b列
Where a=3 and b=5 and c=4 是,使用了abc
Where b=3 / where c=4
Where a=3 and c=4 a列能发挥索引,c不能
Where a=3 and b>10 and c=7 A能利用,b能利用, C不能利用
同上,where a=3 and b like ‘xxxx%’ and c=7 A能用,B能用,C不能用
filesort 二次排序

一般而言,分组统计要先按分组字段,有序排列
用临时表来排序


联合索引反而快了,主键索引反而慢了 ----》 聚簇索引,索引覆盖 , innodb与myisam索引的区别

innodb的次索引指向对主键的引用
myisam的次索引和主索引 都指向物理行
Myisam


存在物理行中。。。。。。




主键索引 普通索引


i nnodb的主索引文件上,直接存放该行数据,称为聚簇索引,次索引指向对主键的应用;
myisam中,主索引和次索引,都指向物理行

注意 :innodb 来说 ,
1: 主键索引 既存储索引值 , 又在叶子中存储行的数据
2: 如果没有主键 , 则会 Unique key 做主键
3: 如果没有 unique, 则系统生成一个内部的 rowid 做主键 .
4: innodb , 主键的索引结构中 , 既存储了主键值 , 又存储了行数据 , 这种结构称为 聚簇索引

高性能索引策略
0: 对于 innodb 而言 , 因为节点下有数据文件 , 因此节点的分裂将会比较慢 .
对于 innodb 的主键 , 尽量用整型 , 而且是递增的整型 .
如果是无规律的数据 , 将会产生的页的分裂 , 影响速度 .

实验innodb 顺序和乱序的执行效率

索引覆盖 :
索引覆盖是指 如果查询的列恰好是索引的一部分 , 那么查询只需要在索引文件上进行 , 不需要回行到磁盘再找数据 .
这种查询速度非常快 , 称为 索引覆盖

如果有 Using index则说明是索引覆盖

innodb沿着主键走,因为是在叶子上,如果挂的数据比较多的情况下,查询数据跨的块太多,所以查询的比较慢,但是如果在innodb上是复合索引的话,id.ver 是二级索引,是次索引,所以是按照所以来走,因此查询的比较快,不是主键索引的话,就没有下面的数据块,只取id,不需要去id下面的数据。因为myisam是存在磁盘上,所以两者差别很小。

索引的长度和区分度是相互矛盾的,索引长度越长,区分度越高,所以应该,分析数据,寻找最合适的位置。


用crc函数来构造伪哈希列
把字符串的列,转成整形,来降低索引的长度,从而提高查询效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值