索引的目的在于提高查询效率,以及添加约束;
常用的索引有:
普通索引,唯一索引,联合索引,全文索引,空间索引…
唯一索引 有两个分类 分别是:主键索引和唯一索引
联合索引 有三个分类 分别是:联合普通索引、联合主键索引、联合唯一索引
索引类型:
hash:查询单条快,范围查询慢
b+树:层级越多,数据量指数级增长
存储引擎:
InnoDB:支持事务,支持行级别锁定,支持 B+树 、支持全文(Full-text)索引、不支持hash
MyISAM:不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
Memory
NDB:支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;
Archive
未命中索引:
模糊查询:%在查询条件前面
使用函数:REVERSE(email);
类型不一致:
!=、>、<
order by:如果对非主键列排序,则结果列也需要索引,如果对主键排序 则结果列可没有索引—
count:count()、count(1)、count(列名) 资料上说尽量不使用count(),但实测感觉区别不大
在创建表示 列类型是(text)时 必须指定长度,否则无法命中索引
组合索引时需要遵循(最左前缀原则);
覆盖索引:
select * from table_name where id = 123;
已知该表中的id字段已添加了索引,所以如上sql命中了索引,但是查询结果是*,如果想要查询效率更快 则需要覆盖索引:
select id from table_name where id = 123;
Original: https://www.cnblogs.com/ganguixu/p/15891738.html
Author: 干桂旭
Title: MySQL面试整理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591882/
转载文章受原作者版权保护。转载请注明原作者出处!