网站建设需要些什么资料,做韩国网站有哪些东西吗,wordpress版本列表,网站更换备案文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类
从索引字段特性
主键索引、唯一索引、常规索引、全文索引… 文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类
从索引字段特性
主键索引、唯一索引、常规索引、全文索引
从物理存储
聚簇(集)索引、二级索引
从数据结构
B树索引、Hash索引、全文索引
InnoDBMyISAMMemoryB tree索引YesYesYesHash索引NoNoYesFull-text索引YesYesNo
组成索引的字段个数
单列索引、联合索引
InnoDB主键索的Btree高度为多高呢? 图片中n表示主键个数n1表示指针数量。
explain执行计划 最左匹配原则
如果索引了多列(联合索引)要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始并且不跳过索引中的列。如果跳跃某一列索引将部分失效(后面的字段索引失效)。范围查询(不含等于)后面的字段不走索引。
注查询字段存在即可和sql顺序无关
索引失效情况
在索引字段上进行运算
explain select * from tb_user where substring(phone, 10, 2) 15;字符串类型字段使用时不加引号
-- 此处phone的值没有加引号
desc select * from tb_user where phone 17799990015;头部模糊查询(即%在前面)匹配
-- 此处%在前面
explain select * from tb_user where profession like %工程;用or分割开的条件其中某一列没有索引那么涉及的索引都不会被用到。
-- 必须id和name都有索引才可以用到索引
desc select * from t_achievement_application where id 66 or name 张三;如果MySQL评估使用索引比全表更慢则不使用索引。(参考范围查询、is null、is not null) is null、is not null是否走索引取决于表中的数据分布。
SQL提示 其中 use是建议MySQL用这个索引
覆盖索引、回表查询
尽量使用覆盖索引(查询使用了索引并且需要返回的列在该索引中已经全部能够找到)减少select *。
Extra列描述 NULL 需要回表查询 using index condition : 查找使用了索引但是需要回表查询数据 using where; using index : 查找使用了索引但是需要的数据都在索引列中能找到所以不需要回表查询数据 username、password建立联合索引避免回表查询。
前缀索引 索引设计原则