1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| 功能上的分类 1>辅助索引
辅助索引(S)怎么构建B树结构的?
(1). 索引是基于表中,列(索引键)的值生成的B树结构 (2). 首先提取此列所有的值,进行自动排序 (3). 将排好序的值,均匀的分布到索引树的叶子节点中(16K) (4). 然后生成此索引键值所对应得后端数据页的指针 (5). 生成枝节点和根节点,根据数据量级和索引键长度,生成合适的索引树高度 id name age gender select * from t1 where id=10; 问题: 基于索引键做where查询,对于id列是顺序IO,但是对于其他列的查询,可能是随机IO.
2>聚集索引 (1)表中设置了主键,主键列就会自动被作为聚集索引. (2)如果没有主键,会选择唯一键作为聚集索引. (3)聚集索引必须在建表时才有意义,一般是表的无关列(ID) 辅助索引(S)怎么构建B树结构的? (1) 在建表时,设置了主键列(ID) (2) 在将来录入数据时,就会按照ID列的顺序存储到磁盘上.(我们又称之为聚集索引组织表) (3) 将排好序的整行数据,生成叶子节点.可以理解为,磁盘的数据页就是叶子节点 聚集索引和辅助索引构成区别 (1)聚集索引只能有一个,非空唯一,一般时主键 (2)辅助索引,可以有多个,时配合聚集索引使用的 (3)聚集索引叶子节点,就是磁盘的数据行存储的数据页 (4)MySQL是根据聚集索引,组织存储数据,数据存储时就是按照聚集索引的顺序进行存储数据 (5)辅助索引,只会提取索引键值,进行自动排序生成B树结构 辅助索引细分 (1)普通的单列辅助索引 (2)联合索引 多个列作为索引条件,生成索引树,理论上设计的好的,可以减少大量的回表查询 (3)唯一索引 索引列的值都是唯一的. 索引树高度越低越好,一般维持3-4层最佳。 关于索引树的高度受什么影响 (1)数据量级较大, 解决方法:分表,分库,分布式 (2)索引列值过长 , 解决方法:前缀索引 (3)数据类型: 变长长度字符串,使用了char,解决方案:变长字符串使用varchar enum类型的使用enum ('山东','河北','黑龙江','吉林','辽宁','陕西'......) 1 2 3
|