Mysql 索引

[TOC]

[music]462156793[/music]

索引的优缺点

索引的创建原则:
1. :不要过度索引
2. :在where条件最频繁的列上加
3. :尽量索引散列值,过于集中的值加索引意义不大

索引的优点和缺点:

索引的优点
1、通过创建唯一索引,保证数据库表每行数据的唯一性
2、大大加快数据查询速度
3、在使用分组和排序进行数据查询时,可以显著减少查询中分组和排序的时间

索引的缺点:
1、维护索引需要耗费数据库资源
2、索引需要占用磁盘空间,索引文件可能比数据文件更快达到最大文件尺寸
3、当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响

索引分类

B+索引
全局索引(innode不支持)
哈希索引
聚集索引(myisam不支持)

B+树索引

b+树的添加:
三种情况

叶子页 索引页 操作
1)直接加入即可
1)拆分叶子页,从中间节点拆出两个
1)拆分叶子页,从中间节点拆出两个 2)拆分索引页,记录分两个,再中间节点放入上一层索引页

B+的删除操作
填充因子来控制树的删除变化,50%是最小值,

叶子节点小于因子 中间节点小于因子 操作
直接删除,如果是index节点,就用其右节点代替
合并叶子节点和其兄弟节点,同时更新index
合并叶子节点和其兄弟节点,更新idex , 合并index和其兄弟

聚集索引

叶子节点存放为整张行记录数据,
辅助索引: 叶子节点不包含行记录的数据,叶子节点除了包含键值以外,索引行中还包含一个书签,可以跳转到具体数据页

哈希索引

全文索引

两个区别

MyISAM支持全文索引(FULLTEXT)、压缩索引,InnoDB不支持

InnoDB支持事务,MyISAM不支持

MyISAM顺序储存数据,索引叶子节点保存对应数据行地址,辅助索引和主键索引相差无几;InnoDB主键节点同时保存数据行,其他辅助索引保存的是主键索引的值

MyISAM键值分离,索引载入内存(key_buffer_size),数据缓存依赖操作系统;InnoDB键值一起保存,索引与数据一起载入InnoDB缓冲池

MyISAM主键(唯一)索引按升序来存储存储,InnoDB则不一定

MyISAM索引的基数值(Cardinality,show index 命令可以看见)是精确的,InnoDB则是估计值。这里涉及到信息统计的知识,MyISAM统计信息是保存磁盘中,在alter表或Analyze table操作更新此信息,而InnoDB则是在表第一次打开的时候估计值保存在缓存区内

MyISAM处理字符串索引时用增量保存的方式,如第一个索引是‘preform’,第二个是‘preformence’,则第二个保存是‘7,ance‘,这个明显的好处是缩短索引,但是缺陷就是不支持倒序提取索引,必须顺序遍历获取索引


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注