加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

面试官出的MySQL索引问题,这篇文章全给你解决!

发布时间:2019-10-13 13:35:57 所属栏目:MySql教程 来源:欧阳思海
导读:0 前言 这篇文章不会讲解索引的基础知识,主要是关于MySQL数据库的B+树索引的相关原理,里面的一些知识都参考了MySQL技术内幕这本书,也算对于这些知识的总结。对于B树和B+树相关的知识,可以参考我的这篇博客:面试官问你B树和B+树,就把这篇文章丢给他 1

仅仅使用索引中的最左边列进行查询,比如在 col1 + col2 + col3 字段上的联合索引能够被包含 col1、(col1 + col2)、(col1 + col2 + col3)的等值查询利用到,可是不能够被 col2、(col2、col3)的等值查询利用到。

最左匹配原则可以算是 MySQL 中 B-Tree 索引使用的首要原则。

  •  仅仅对索引进行查询

当查询的列都在索引的字段中时,查询的效率更高,所以应该尽量避免使用 select *,需要哪些字段,就只查哪些字段。

  •  匹配列前缀

仅仅使用索引中的第一列,并且只包含索引第一列的开头一部分进行查找。

  •  能够实现索引匹配部分精确而其他部分进行范围匹配
  •  如果列名是索引,那么使用 column_name is null 就会使用索引,例如下面的就会使用索引: 
  1. explain select * from t_index where a is null G 
  •  经常出现在关键字order by、group by、distinct后面的字段
  •  在union等集合操作的结果集字段
  •  经常用作表连接的字段
  •  考虑使用索引覆盖,对数据很少被更新,如果用户经常值查询其中你的几个字段,可以考虑在这几个字段上建立索引,从而将表的扫描变为索引的扫描

索引失效情况

  •  以%开头的 like 查询不能利用 B-Tree 索引,执行计划中 key 的值为 null 表示没有使用索引
  •  数据类型出现隐式转换的时候也不会使用索引,例如,where 'age'+10=30
  •  对索引列进行函数运算,原因同上
  •  正则表达式不会使用索引
  •  字符串和数据比较不会使用索引
  •  复合索引的情况下,假如查询条件不包含索引列最左边部分,即不满足最左原则 leftmost,是不会使用复合索引的
  •  如果 MySQL 估计使用索引比全表扫描更慢,则不使用索引
  •  用 or 分割开的条件,如果 or 前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到
  •  使用负向查询(not ,not in, not like ,<> ,!= ,!> ,!< ) 不会使用索引 

【编辑推荐】

  1. 分享一款MySQL语句优化辅助工具--DBA必备
  2. 到底要不要使用数据库即服务(DBaaS)?
  3. MySQL中的主键和rowid,看似简单,其实有一些使用陷阱需要注意
  4. 国产自研数据库打败 Oracle?网友热议
  5. 什么?Redis的QPS是MySQL的100倍?
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读