高性能MySQL阅读笔记三

索引的结构
1.BTree 索引
大多数引擎支持 例外: 5.1之前Archive 不支持任何索引 5.1之后只支持自增列索引

2.Btree索引对以下查询有效
1.全值匹配 索引中的所有列进行匹配
2.匹配最左前缀
3.匹配列前缀
4.匹配范围值 字符串也是可以比较的
5.精确的匹配某一列并范围匹配到另一列
6.只访问索引查询
3.Hash索引
只有memory引擎显式支持hash索引
基于hash表实现,只有精确匹配索引所有列的查询才有效
无法顺序匹配
必须要配置触发器
使用hash索引的值查询 select * from xx where k=CRC32(“abc”);
93000条就可能出现1%冲突
4.R-Tree索引
空间数据索引 可以用作地理数据存储,Mysql要使用GIS相关的函数来维护数据, 开源数据库 系统对GIS的解决方案做的比较好的就是POSTGRESQL 和POSTGIS

5.全文索引
全文索引更类似于搜索引擎做的事情,而不是 简单的where匹配 创建全文索引不会和B-Tree索引冲突

6.其他类型 类似树形索引 等等

值得一提的是: InnoDB有一个特殊的功能叫做“自适应哈希索引” 当innoDB注意到某些索引值被使用的非常频繁的时候, 就会在内存中基于B-Tree索引之上再创建一个hash索引,这样就让B-Tree索引页具有hash索引的特性。

索引的优点

1.减少服务器的扫描数量
2.服务器避免排序和临时表
3.索引可以将随机io转换成顺序io

高性能的索引策略
前缀索引和索引选择性
1.唯一性索引的选择性较高,索引性能也是最好的
2.对于BLOB,TEXT 或者很长的Varchar类型的列必须使用前缀索引,因为mysql不允许
索引这些列的完整长度
3.要选好前缀的长度 (前缀是指字段的前多少个)
创建前缀索引的sql语句
alter table xx add key (col(7));
多值索引
创建多值索引时要进行严格的分析 要分析每一个索引键的选择性
选择性 = count(distinct xxx)/count(*)
选择性越大的越靠前
建议使用 顺序主键 自增长主

覆盖索引
即所查询的数据在索引列中 不用去检索数据就叫覆盖索引

排序分页的sql orderby limit
如果不加索引的话会非常慢,解决方案 1.限制用户的页数 2.先根据索引找出主键再查询


表损坏检查
check table
修复损坏表
repair table

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值