1.索引的实现原理
索引在MySQL中都是以树的形式存在的(自平衡二叉树:B-Tree)
2 在MySQL中主键和unique字段上都会自动添加索引
3什么时候会需要添加索引?
1数据量庞大
2该字段经常出现在where后面
索引的优点
通过创建 唯一性索引,可以保证数据库表中每一行数据的唯一性;
可以加快数据的 检索速度,这也是创建索引的主要原因;
可以加速表和表之间的连接,特别是在实现 数据的参考完整性 方面特别有意义;
通过使用索引,可以在查询的过程中,使用 优化隐藏器,提高系统性能。
索引的缺点
时间上,创建和维护索引都要耗费时间,这种时间随着数据量的增加而增加,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度;
空间上,索引需要占 物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/database-handbook/pxnng6/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
什么是最左前缀匹配原则
在 MySQL 建立 联合索引(多列索引) 时会遵守最左前缀匹配原则,即 最左优先,在检索数据时从联合索引的最左边开始匹配。例如有一个 3 列索引(a,b,c),则已经对(a)、(a,b)、(a,b,c)上建立了索引。所以在创建 多列索引时,要根据业务需求,where 子句中 使用最频繁 的一列放在最左边。
根据最左前缀匹配原则,MySQL 会一直向右匹配直到遇到 范围查询(>、<、between、like)就停止匹配,比如采用查询条件 where a = 1 and b = 2 and c > 3 and d = 4 时,如果建立(a,b,c,d)顺序的索引,d 是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,并且 where 子句中 a、b、d 的顺序可以任意调整。
如果建立的索引顺序是 (a,b) ,那么根据最左前缀匹配原则,直接采用查询条件 where b = 1 是无法利用到索引的。
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/database-handbook/px0cug/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3该字段很少进行DML操作 (增删改)
4添加索引
create index emp_ename_index on(emp)ename;
5删除索引
drop index emp_ename_index on emp;
6如何查看是否使用了索引
explain select xxxxx;
7索引失效的三种情况
1查询时以“%”开头
2使用or
3使用复合索引的时候,没有使用左侧的列查找
4where查询中索引列参加了运算
5 where当中索引列使用了函数