读高性能mysql感--5--索引

创建高性能的索引

索引可以让服务器快速定位到表的位置,附加作用,B-Tree索引,按照顺序排序,所以mysql可以 order by  和group by操作因为数据是有序的,所以B-TREE也会将相关列值都存储在一起。索引中存储了实际的列值索引使用索引就能完成全部查询。

   总结索引的优点:

                         1.索引大大减少服务器扫描的数据量

                          2.索引可以帮助服务器避免排序和临时表

                          3.索引可以将随机IO变为顺序IO

 

索引是最好的解决方案吗?

  索引不是最好的工具,但索引能够帮助存储引擎快速找到记录带来的好处。高效的索引才是有效的。小的表全表扫描更有效。中大型表,索引非常有效,但对于特大型表,建立和使用索引的代价随之增长,这种情况下,可以使用分区分出查询的一组数据,而不是一条一条的记录匹配。

 

 

高性能索策略

独立的列

是指索引的列不是表达式的一部分,也不是函数的参数

 -------->  select actor_id from actor where actor_id+1=5;

where的表达式等价于 actor_id=4,mysql无法解析这个方程式,用户行为,应该始终将索引单独放在比较符号的一侧

 

前缀索引和索引的选择性

 

为什么需要??????----------->有时需要索引很长的字符列,这会让索引变得大且慢。

即可以索引开始部分字符,这样可以节约索引的空间,提高索引的效率,但这样会降低索引的选择性(扫描的前缀越短,重复越多,叶子节点也就越多)。

选择性--------->  不重复的索引值/数据表记录总数(#T)    范围1/#T 到1之间。唯一索引的选择性是1.这是最好的索引选择性,性能最好。

 

选择足够长的浅醉保证比较高的选择性,同时又能太长(以便节约空间),前缀的基数应该接近于完整列的基数

不能光看平均选择性,也要看数据分布的均匀性。

平均选择性

数据均衡展示

 

创建前缀索引:---------->  ALTER TABLE city_demo add key(city(7));

缺点:无法使用前缀索引做order by 和group by,也无法使用前缀索引做覆盖扫描

为什么?-------->因为不是对整个字段做索引,所以无法按照顺序进行存储数据

数据参考:https://www.cnblogs.com/gomysql/p/3628926.html

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值