Mysql索引

什么是索引?

索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。

Mysql中有哪几种索引?

有Hash索引和B+ Tree索引,InnoDB引擎默认的是B+树。

Hash索引和B+ Tree索引有什么优缺点?

Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,适合等值查询,无法进行范围查询,无法利用索引完成排序,不支持多列联合索引的最左匹配,在大量重复键值对的情况下因为哈希碰撞导致效率低下;
B+ Tree是一种多路平衡查找树,节点天然有序(左子<父<右子), 对于范围查询的时候不需要做全表扫描。

B+ Tree的叶子节是如何储存数据的?

Mysql的表一定会有一个聚簇索引,叶子节点储存整行数据,除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes),叶子节点存储索引列及主键。
InnoDB对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。

各种索引查询数据的优缺点?

主键索引只需查询一次,二级索引如果不是覆盖索引会查询两次。

什么是覆盖索引?

如果一个索引包含所有需要查询的字段的值,则这个索引就为覆盖索引。

如何创建索引?

减少IO操作,特别是随机IO操作是数据库优化的主要方式。
使用联合索引,增加覆盖索引查询的几率,减少回表,可以提高性能。
创建一个联合索引,实际上相当于创建了多个索引,减少索引占用空间。索引命中时遵循最左匹配原则,应将使用频繁的列放到左边。

索引执行分析?

通过explain查看sql语句的执行计划。1、根据搜索条件,找出所有可能使用的索引 2、计算全表扫描的代价 3、计算使用不同索引执行查询的代价 4、对比各种执行方案的代价,找出成本最低的那一个。

posted @ 2019-08-12 21:44  NotNil  阅读(148)  评论(0编辑  收藏  举报