大家好,我是anyux。本文介绍MySQL数据库的索引创建与删除。BTree树的索引分类聚集索引,聚集索引一般是主键列辅助索引,辅助索引辅助聚集索引聚集索引生成过程MySQL会自动选择主键作为聚集索引列,没有主键列会选择唯一键,如果都没有会生成隐藏的主键列MySQL进行存储时,会按照聚集索引列值的顺序,有序存储数据行聚集索引直接将原表数据页,作为叶子结点,然后提取聚集索引列向上生成枝和根辅助索引生成过程管理员选择一个列创建辅助索引MySQL会自动将此列的值取出来将此列的值自动排序将排好序的数据,均匀的存储到索引的叶子节点生成枝节点和根节点辅助索引的使用过程先遍历辅助索引,找到对应的索引键值所对应的id值或者是主键值,进而使用主键值回到聚集索引,再进行遍历查询找到指行数据聚集索引和辅助索引的区别表中的任何一个列都可以创建辅助索引,在你有需要的时候,只要名字不同即可在一张表中,聚集索引只能有一个,一般是主键辅助索引,叶子结点只存储索引列的有序值聚集索引,叶子结点存储的是有序的整行数据MySQL的表数据存储是聚集索引组织表辅助索引细分单列辅助索引联合索引(覆盖索引)[重要]唯一索引索引树高度通常情况下,千万级别的数据,索引树高度应该在3~4层,数据行数较多时候分表:MySQL自带的partion功能,使用的比较少了分片:分布式架构(分库)字段长度业务允许,尽量选择长度短的列作为索引列业务不允许,选择前缀索引数据类型对于变长长度的列来讲,使用varchar类型比char类型要有优势。对于大表而言,使用char数据类型的每个索引长度都是固定值,空格也算在索引的长度里面,而varchar不是。所以叶子结点的消耗较大,因而要选择varchar数据类型索引的命令操作索引查询PRI主键索引MUL辅助索引UNI唯一索引useworld;查看索引desccity;查看索引详细信息showindexfromcity;创建索引注意,创建索引也是在线的DDL操作,操作时也会出现锁表现象。所以创建索引操作应该是业务低谷时间进行操作或者使用PTOSC这样的工具操作,减少对业务的影响创建单列的辅助索引useworld;为city表的name列创建索引altertablecityaddindexidx_name(name);查看索引详情showindexfromcity;创建联合多列的辅助索引useworld;altertablecityaddindexidx_c_p(countrycode,population);创建唯一索引注意,首先需要判断创建索引的列是否存在重复值,存在重复值的列,无法创建唯一索引useworld;selectcount(district)fromcity;selectcount(distinctdistrict)fromcity;事实说明存在重复值,district列不应当做唯一索引altertablecityadduniqueindexuidx_dis(district);创建前缀索引前缀索引和普通索引没差,只是不能使用数字作为索引列useworld;altertablecityaddindexidx_dis(district(5));删除索引useworld;showindexfromcity;mysql批量删除索引altertablecitydropindexidx_name;altertablecitydropindexidx_c_p;altertablecitydropindexidx_dis;
转载请注明:http://www.aierlanlan.com/rzdk/8333.html