MySQL~索引的优缺点是什么?有哪些优化索引的方法?

这篇具有很好参考价值的文章主要介绍了MySQL~索引的优缺点是什么?有哪些优化索引的方法?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.索引的优缺点

优点:提高查询记录的速度。

缺点:

  • 需要占用空间,索引是一种用空间换时间的做法
  • 创建索引和维护索引都需要消耗时间,会降低表的增删查改效率,因为每次进行增删查改,都需要对索引进行维护,需要消耗时间

什么情况下可以使用索引?

  • 经常作为查询条件的字段,如果需要同时查找多个字段,可以建立联合索引
  • 经常放到GROUP BY或者ORDER BY后面的字段,进行GROUP BY或者ORDER BY都会对数据进行排序,这些字段就可以建立一个索引,这样就不需要每次都进行排序了

什么情况下不可以使用索引?

  • 不经常作为查询条件的字段
  • 不经常放到GROUP BY或者ORDER BY后面的字段
  • 重复率高的字段,比如性别,建立索引并不会明显提高查询效率,毕竟索引也需要占空间。
  • 表数据量很少的时候,全表查也非常快,你创建维护索引反倒需要开销。
  • 经常需要更新的字段,如果建立了索引,索引也需要频繁维护(B+树是要保证数据有序的),会影响数据更新的效率。

2.如何优化索引?

前缀索引优化:对一个字符类型的字段使用前缀索引,前缀索引指的是只为前几个字符建立索引,而不是整个字段建立索引,这样可以减小索引的大小。

  • 适用场景:对于一些字符串很长的字段可以使用前缀索引
  • 局限性:1.order by无法使用前缀索引;2.无法把前缀索引用作覆盖索引

覆盖索引优化:建立适当的联合索引,如果要查询的字段就在联合索引中,就可以避免回表,提高查询效率

主键最好是自增的:因为MySQL中索引底层采用的是B+树的结构,它会对索引进行排序

        如果主键不是自增的,插入新的记录就很可能导致页分裂的情况,导致数据页的记录需要发生移动以此来维护索引的有序性,会影响到数据的插入效率。同时也可能会导致内存空间的浪费,影响查询效率。

        如下所示:假设数据页中存有1,3,5,9的索引数据,此时数据页已满,插入索引数据7就会导致页分裂,需要移动元素,同时后续左边的数据页只有小于7的数据才能使用了,大于7的数据就无法使用。

MySQL~索引的优缺点是什么?有哪些优化索引的方法?,mysql,数据库

        如果主键是自增的,每插入一条记录,在数据页中都是追加操作,一个页不够了就开辟一个新的页,就不会发生页分裂的情况,插入效率更高。同时也不会有内存空间的浪费。

MySQL~索引的优缺点是什么?有哪些优化索引的方法?,mysql,数据库

索引最好是not null

        如果索引列存在null会导致MySQL更加难以优化,会影响到查询的效率(比如进行统计的时候,count会省略为null的行)。

        null虽然是空,但是需要额外的一个字节来标识这个null值,更占用空间

防止索引失效

        有时候加上了索引,但是查询的时候可能会导致索引失效,没有使用到索引,所以我们要尽量避免索引失效。

1.使用左模糊匹配或者左右模糊匹配会导致索引失效,因为索引底层是B+树实现的,索引是有序的,只能根据前缀进行比较,在前缀相等的情况下,后续的字符才是有序的。所以无法用在左模糊和左右模糊查询中。

2.对索引列进行计算,函数,类型转换等操作,会导致索引失效。

  • 对于函数和计算,索引保存的是字段原先的值,而不是计算后的值。因此计算后的值无法使用索引。
  • 对于类型转换,比如MySQL在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较,此时实际上就是对字符串的列使用了CAST 函数,所以也会导致索引失效。

3.联合索引不遵循最左匹配原则,比如建立了联合索引(a, b),查询条件为where b = 1;,此时索引失效。原因:联合索引是先根据第一列排序,再根据第二列排序。你如果无法确定第一列,第二列就是无序的,自然就无法使用索引。

4.WHERE子句中,OR前后有一个不是索引列,会导致索引失效。因为OR的含义是两者满足一个即可,所以只有一个列有索引是没有意义的,都会进行全表扫描。

 文章来源地址https://www.toymoban.com/news/detail-566452.html

到了这里,关于MySQL~索引的优缺点是什么?有哪些优化索引的方法?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#实例方法和静态方法有区别吗?各自的优缺点有哪些?

      实例方法和静态方法之间有几个关键的区别: 关联对象:  实例方法是与对象实例相关联的,必须通过实例来调用。 this :  实例方法中可以使用  this  引用当前实例。 访问实例成员:  实例方法可以直接访问和修改实例的字段、属性和其他成员。 生命周期

    2024年01月18日
    浏览(48)
  • 什么是JavaScript中的类(Class)和继承(Inheritance)?它们与原型链继承相比有哪些优缺点?

    JavaScript中的类(Class)和继承(Inheritance)是面向对象编程的重要概念。类是一种抽象的概念,它定义了一组属性和方法,并且这些属性和方法可以在同一组对象中重复使用。继承是类之间的层次关系,其中一个类继承了另一个类的属性和方法,从而能够共享其代码和行为。 在Ja

    2024年02月12日
    浏览(57)
  • 掌握MySQL分库分表(一)数据库性能优化思路、分库分表优缺点

    不能⼀上来就说分库分表! 根据实际情况分析,两个角度思考:不分库分表、分库分表 软优化 数据库参数调优 分析慢查询SQL语句,分析执行计划,进行sql改写和程序改写 优化数据库索引结构 优化数据表结构优化 引入NOSQL和程序架构调整 硬优化 提升系统硬件(更快的IO、更

    2023年04月19日
    浏览(59)
  • MySQL、Redis 和 Zookeeper 实现分布式锁方法及优缺点

    MySQL、Redis 和 Zookeeper 都可以用来实现分布式锁,每种技术都有其特定的实现方法以及各自的优缺点。 MySQL 分布式锁 实现方法 在 MySQL 中实现分布式锁通常涉及到使用数据库表。可以创建一个专用的锁表,并利用行的唯一性(例如利用唯一索引)来实现锁机制。 使用基于事务

    2024年04月11日
    浏览(42)
  • ajax有哪些优缺点?

    Ajax是 异步的JavaScript和XML ,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 Ajax的优点有: 能够在不刷新页面的情况下进行数据的更新,提高了用户体验。 优化了浏览器和服务器之间的通信,减少了不必要的网络传输。 基于标准且被广泛支持,不需要

    2024年02月08日
    浏览(57)
  • html iframe 框架有哪些优缺点?

    🙂博主:锅盖哒 🙂文章核心: html iframe 框架有哪些优缺点? 前言: 用法: 理解: 优点: 嵌套外部内容: 独立性: 分离安全性: 跨平台兼容性: 方便维护: 缺点: 性能开销: 用户体验问题: 可访问性: 不适合移动设备: 高质量讨论: HTML iframe (内联框架)是一种

    2024年02月08日
    浏览(51)
  • ChatGPT内容生成器有哪些优缺点

    ChatGPT原创内容生成器包括我们的文字、图片和AI视屏生成,原创内容生成器已经在众多行业得到了广泛的使用。随着人工智能技术的发展,原创内容生成器的使用也越来越普及。 ChatGPT原创内容生成器能够自动生成各种形式的文章、报告甚至小说,通过算法和自然语言处理技

    2023年04月20日
    浏览(88)
  • 常用Python自动化测试框架有哪些?优缺点对比

    随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了测试时间。而且由于这些框架被广泛使用,他们具有很好的健壮性,并且具有广泛多样的用例集和技术来轻

    2024年02月03日
    浏览(50)
  • AES和DES算法的区别,分别有哪些优缺点

    AES(高级加密标准)和DES(美国数据加密标准)是对称加密算法。AES是美国联邦政府采用的一种区块加密标准。DES是对称性加密里常见的一种,是一种使用密钥加密的块算法。那么AES和DES算法的区别在哪里,这两者有哪些优缺点呢?   什么是AES? AES一般指高级加密标准,又

    2023年04月08日
    浏览(57)
  • RabbitMQ有什么优缺点

    为什么使用MQ?MQ的优点 简答 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。 日志处理 - 解决大量日志传输。 消息

    2024年02月11日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包