2.mysql索引
mysql索引
- 索引是一种特殊的文件(表空间的一个组成部分),包含着对数据表里所有记录的引用指针(依靠数据结构和算法来组织数据,快速检索出需要的数据的数据结构),最常见是使用哈希表,b+树作为索引,本质(通过不断缩小想要获取数据的范围,来筛选想要的结果,同时把随机的数据变成顺序的数据)
- mysql引擎:(存在两种引擎 Innodb和myisam)
- 共同点:都是使用b+树的结构存储数据
- Innodb:
存在两种索引:聚簇索引(主键索引),非聚簇索引(辅助索引),本质是一种(数据存储方式)
聚簇索引:每个表只能有一个主键索引,b+树结构,行数据和索引存储在一起,辅助索引树只存储辅助键和主索引ID,主键索引树和辅助索引树几乎是两种类型的树
非聚集索引:每个表可以有多个,b+树结构,主索引树在叶子节点存储指向真正数据行的指针,而非主索引ID
回表:先在辅助索引树中检索数据,获取主索引ID,然后在主键索引树中检索这个ID的记录
- Myisam
使用非聚集索引方式,即数据和索引落在两个不同的文件,在建表时以主键来建立主索引树,树的叶子节点存储对应数据的物理地址
- 注意点:
- Innodb和myisam都使用了非聚簇索引,但是实现方式不一样,存在指针指向的索引特指myisam的实现,对于Innodb的非聚簇实现而是采取回表的方式
- InnoDB主键聚簇索引B+树的节点存储了主键和数据行,MyISM非聚簇索引B+树存储了主键和指向data的指针
- 索引的优缺点
- 索引不是万能的,加快数据的检索,但是会使数据操作变慢,每修改数据记录,索引就会刷新一次,同一表的索引总数限制为16个]
- 实际上索引也是一张表,表中保存了主键与索引字段,并指向实体类的记录,索引也是占用空间的
- 索引有哪几种类型?
- 普通索引
最基本的索引,没有任何限制,值可以为空,仅加速查询
创建索引:Create INDEDX index_name ON table_name(column(length))
修改索引:ALTER TABLE table_name ADD INDEX index_name ON (column(length))
- 唯一索引
与普通索引类似,区别:索引列的值必须是唯一的,允许为空。联合索引的话,列的组合必须是唯一的(加速查询+列值唯一(可为空))
创建唯一索引:Create UNIQUE INDEX index_name ON table_name(column(length))
修改索引:ALTER TABLE table_name ADD UNIQUE index_name ON (column(length))
- 主键索引
一种特殊的唯一索引,一个表只能有一个主键,不允许为空。(加速查询+列值唯一(不可能有Null) + 表中只有一个) 一般创建表时有同时创建主键索引
- 联合索引
指在多个字段上创建的索引,只有当在查询条件中使用创建索引时的第一个字段,索引才使用,遵循最左前缀集合 效率大于索引合并
- 全文索引(mysql5.6以前InnoDB数据表不支持全文索引)
主要用来查找文本中的关键字,而不是精确的数值比较,只能用于CHAR,VARCHAR,TEXT创建
- 普通索引
- 创建索引有什么原则
- 针对sql语句里的where,order by条件及 group by来设计索引,后面跟的字段都是联合索引的最左侧开始部分字段
- 尽量使用基数比较大的字段,就是值比较多的字段,那样才能发挥出b+树快速二分查找的优势,以及对于比较长的字符串类型的列,可以使用最左前缀索引
- 索引列不能套函数,避免索引失效
- 范围查询的字段用到了索引,接下来的条件都不能用索引,尽量用作最后那个
- 针对低基数字段筛选+排序可以设计辅助索引
- 什么是最左前缀原则,什么事最左匹配原则
- 最左前缀原则:
- 最左匹配原则: 在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边
- 最左前缀原则:
- 引用文章:
https://www.cnblogs.com/williamjie/p/11081081.html
https://blog.csdn.net/m0_45406092/article/details/111939737
https://blog.csdn.net/zhanghao143lina/article/details/128899036
https://juejin.cn/post/6844904062329028621
本文作者:乐天
本文链接:https://www.cnblogs.com/blackamon/p/17109570.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步