面试又给我问到MySQL索引【索引的使用策略及优化】「建议收藏」

面试又给我问到MySQL索引【索引的使用策略及优化】

大家好,又见面了,我是全栈君。

精选文章

2020最新版MySQL数据库面试题(一)

2020最新版MySQL数据库面试题(二)

MySQL 上亿大表优化实践

别怕!MySQL引起的CPU消耗过大,我有办法

MySQL的查询需要遍历几次B+树,理论上需要几次磁盘I/O?

五、索引的使用策略

什么时候要使用索引?

  • 主键自动建立唯一索引;

  • 经常作为查询条件在WHERE或者ORDER BY 语句中出现的列要建立索引;

  • 作为排序的列要建立索引;

  • 查询中与其他表关联的字段,外键关系建立索引

  • 高并发条件下倾向组合索引;

  • 用于聚合函数的列可以建立索引,例如使用了max(column_1)或者count(column_1)时的column_1就需要建立索引

什么时候不要使用索引?

  • 经常增删改的列不要建立索引;

  • 有大量重复的列不建立索引;

  • 表记录太少不要建立索引。只有当数据库里已经有了足够多的测试数据时,它的性能测试结果才有实际参考价值。如果在测试数据库里只有几百条数据记录,它们往往在执行完第一条查询命令之后就被全部加载到内存里,这将使后续的查询命令都执行得非常快–不管有没有使用索引。只有当数据库里的记录超过了1000条、数据总量也超过了MySQL服务器上的内存总量时,数据库的性能测试结果才有意义。

索引失效的情况:

  • 在组合索引中不能有列的值为NULL,如果有,那么这一列对组合索引就是无效的。

  • 在一个SELECT语句中,索引只能使用一次,如果在WHERE中使用了,那么在ORDER BY中就不要用了。

  • LIKE操作中,’%aaa%’不会使用索引,也就是索引会失效,但是‘aaa%’可以使用索引。

  • 在索引的列上使用表达式或者函数会使索引失效,例如:select * from users where YEAR(adddate)<2007,将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:select * from users where adddate<’2007-01-01′。其它通配符同样,也就是说,在查询条件中使用正则表达式时,只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。

  • 在查询条件中使用不等于,包括<符号、>符号和!=会导致索引失效。特别的是如果对主键索引使用!=则不会使索引失效,如果对主键索引或者整数类型的索引使用<符号或者>符号不会使索引失效。(经erwkjrfhjwkdb同学提醒,不等于,包括<符号、>符号和!,如果占总记录的比例很小的话,也不会失效)

  • 在查询条件中使用IS NULL或者IS NOT NULL会导致索引失效。

  • 字符串不加单引号会导致索引失效。更准确的说是类型不一致会导致失效,比如字段email是字符串类型的,使用WHERE email=99999 则会导致失败,应该改为WHERE email=’99999’。

  • 在查询条件中使用OR连接多个条件会导致索引失效,除非OR链接的每个条件都加上索引,这时应该改为两次查询,然后用UNION ALL连接起来。

  • 如果排序的字段使用了索引,那么select的字段也要是索引字段,否则索引失效。特别的是如果排序的是主键索引则select * 也不会导致索引失效。

  • 尽量不要包括多列排序,如果一定要,最好为这队列构建组合索引;

六、索引的优化

1、最左前缀

索引的最左前缀和和B+Tree中的“最左前缀原理”有关,举例来说就是如果设置了组合索引<col1,col2,col3>那么以下3中情况可以使用索引:col1,<col1,col2>,<col1,col2,col3>,其它的列,比如<col2,col3>,<col1,col3>,col2,col3等等都是不能使用索引的。

根据最左前缀原则,我们一般把排序分组频率最高的列放在最左边,以此类推。

2、带索引的模糊查询优化

在上面已经提到,使用LIKE进行模糊查询的时候,’%aaa%’不会使用索引,也就是索引会失效。如果是这种情况,只能使用全文索引来进行优化(上文有讲到)。

3、为检索的条件构建全文索引,然后使用

SELECT * FROM tablename MATCH(index_colum) ANGAINST(‘word’);

4、使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

(完结)

面试又给我问到MySQL索引【索引的使用策略及优化】「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111725.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月15日 下午8:00
下一篇 2022年2月15日 下午8:00


相关推荐

  • 有什么用_pattern和way的区别

    有什么用_pattern和way的区别开始:在利用servlet或filter进行url请求的匹配时,很关键的一点是匹配规则,但是servlet容器中的匹配规则既不是简单的通配也不是正则表达式而是有自己的规则比较容易混淆绝对路径和相对路径当浏览器发起一个url请求后,该请求发送到servlet容器的时候,容器会先将请求的url减去当前应用上下文的路径作

    2025年7月1日
    2
  • Java高级工程师薪资多少?如何才能成为一个优秀的高级程序员?

    Java高级工程师薪资多少?如何才能成为一个优秀的高级程序员?Java语言在2015年首次荣登编程语言热门榜的榜首,2018年再度登上榜首,下面不妨让我们来看看Java开发工程师的薪资待遇如何。以上是三张在猎聘网上随便找的三张截图,可见高级工程师年薪都是在30-60万。那么重点来了,怎样才算是一个高级工程师呢?你是否也能成为一个优秀的高级工程师?工程师必须掌握的知识点是那些?人人都想成为高薪架构师,为什么现在高…

    2022年7月8日
    37
  • SQL server2019安装教程[通俗易懂]

    下载必备由于安装文件太大,所以没有办法上传,各位就请自行下载安装步骤点击sql2019安装包选择基本浏览安装到指定的位置,点击安装下载下载完成之后就是这个界面,然后点击自定义选择下一步等待扫描完成后选择选择下一步之后再选择第一个“执行SQLSERVER2019的全新安装”,然后点击下一步勾选第一个接受条款,继续下一步在“实例功能”里面勾选你需要…

    2022年4月7日
    65
  • 伪装计算机主机,位置伪装大师电脑版

    伪装计算机主机,位置伪装大师电脑版《位置伪装大师电脑版》是一款免费的GPS位置变换软件,《位置伪装大师电脑版》能够进行GPS位置模拟,让你轻松变换自己的位置,变换位置随心所欲!官方介绍位置伪装大师v3.6新版来袭!变换位置,随心所欲!!全新的界面,全新的功能,全新的体验。更加简洁、更加人性化的操作流程。功能介绍-支持国外伪装,实现全球伪装-一键收藏地点,方便快捷-多种搜索模式,可以快速找到位置-支持经纬度定位,精确寻找位置…

    2022年5月10日
    55
  • Anaconda详细安装及使用教程(带图文)

    Anacond的介绍Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。Conda是一个开源的包、环境管理器,可以用于…

    2022年4月7日
    63
  • 如何使用Jedis操作Redis数据库?

    如何使用Jedis操作Redis数据库?大家都知道 数据库中的数据要跟编程语言联系在一起 我们使用编程语言来获取数据库中的数据或者给数据库中传入数据 那么作为一名 Java 程序员 我们该如何使用 java 来操作 Redis 数据库呢

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号