【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择

这篇具有很好参考价值的文章主要介绍了【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🎊专栏【MySQL】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【The Right Path】
🥰欢迎并且感谢大家指出小吉的问题


【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

🍔索引的使用

⭐验证索引效率

🎈没有创建索引时,执行SQL语句,查看SQL的耗时
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

🎈创建索引后,执行SQL语句,查看SQL的耗时

【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql
比较发现,时间减少了

🎈细节

创建索引相当于在构建B+Tree
所以创建索引也需要花时间

⭐最左前缀法则

最左前缀法则就是查询从索引的最左列开始,并且不跳过索引中的列
如果索引了多列(联合索引),要遵循最左前缀法则

🏳️‍🌈查询索引的时候,必须包含最左边的一列,否则不满足最左前缀法则,索引失效
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

查询的时候,如果
跳过了最左边的列,索引全部失效
跳过了其中的某一列(不是最左边的),索引部分失效

⭐范围查询

联合查询在出现范围查询(>,<)时,范围查询右侧的列索引失效
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

在业务允许的情况下,尽量使用>=这样子的查询

⭐索引失效的情况

🏳️‍🌈在索引列上使用运算操作(例如substr函数),索引将失效
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

🏳️‍🌈字符串类型的字段使用时,不加引号,索引将失效
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

🏳️‍🌈模糊查询
如果仅仅是尾部模糊匹配,索引不会失效
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

如果是头部模糊匹配,索引失效
如果在查询大数据的情况下,一定要规避这种情况
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql
🏳️‍🌈or连接的条件
使用or分割开的条件,如果or前的条件中列有索引,而后面的列没有索引,那么涉及的索引不会被用到
如下面的例子,由于age没有索引,所以即使id,phone有索引,索引也会失效
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

为了解决这个问题,我们要针对age建立索引
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql
🏳️‍🌈数据分布影响
如果MySQL 的优化器 认为使用索引比全表更慢,那么不使用索引
(是MySQL自己进行评估认为的结果)
比如进行查询一个数据
用户:查询什么什么东西
MySQL:找一个更快的方式,比如使用全表扫描比索引快,那么采用全表扫描了
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

使不使用索引,是由表中的数据决定的,而不是固定的

🌺SQL提示

SQL提示是指在使用SQL语言编写数据库查询或操作时,数据库管理系统(如MySQL、Oracle、SQL Server等)提供的辅助功能。这些提示可以帮助用户更快地完成SQL语句,减少错误,并提供有关数据库结构和数据的相关信息。
简单来说,就是在SQL语句里面添加一些人为的提示来达到优化操作的目的

🎈告诉数据库使用什么索引(use)

这个是建议MySQL使用这个索引,但是是否要使用,MySQL还是要自己去权衡一下

explain select * from 表名 use index(索引名) where 条件;

🎈告诉数据库不使用什么索引(ignore)

explain select * from 表名 use index(索引名) where 条件;

🎈告诉数据库必须使用什么索引(force)

explain select * from 表名 force index(索引名) where 条件;

🏳️‍🌈前缀索引

当字段类型为字符串(varchar,text)时,有时候需要索引很长的字符串,会使索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率
这个时候我们就可以使用前缀索引,仅对字符串的一部分前缀,建立索引,这样子可以大大节约索引空间,从而提高索引效率

create index 索引名 on 表名(字段名(前缀长度n));

🎈前缀长度n

可以根据索引的选择性来使用,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高,查询效率越高
唯一索引的选择性是1,是最好的索引选择性,性能也是最好的

🎈获取索引选择性的方法

可以使用下面的公式来实现

select count(distant 字段名)/count(*) from 表名;

【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql
可以分步计算,康康过程
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql
✨如果是针对前缀索引进行计算,那么公式里面要加上substring

select count(distant substring(字段名,起始字母,截取的字母个数))/count(*) from 表名;

【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql
可以通过多次计算,找到最合适的前缀长度

🎈查询过程
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

🎄覆盖索引

MySQL的覆盖索引是一种特殊的索引类型,它包含了查询所需的所有列,从而使得查询可以直接通过索引本身来完成,而无需再去访问实际的数据行。通常,数据库查询需要根据索引定位到相应的数据行,然后再从数据行中获取所需的列值。但是,使用覆盖索引,MySQL可以在索引中找到所有需要的列,避免了额外的数据行查找尽量减少select *的使用,从而提高了查询性能。

🍔单列索引和联合索引的选择问题

🎆单列索引:一个索引仅仅包含一个列
🎆联合索引:一个索引包含多个列

✨单列索引

使用单列索引的时候,发现MySQL优化器会选择其中一个查询效率比较高的一个索引
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

✨联合索引

使用联合索引的时候,MySQL优化器会选择联合索引

【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

多条件联合查询的时候,MySQL优化器会评估哪个字段的索引效率更高,会选择该字段完成本次查询

【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

🍔索引设计原则

【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql
【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择,MySQL,数据库,mysql

🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰文章来源地址https://www.toymoban.com/news/detail-602903.html

到了这里,关于【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【从删库到跑路】详细讲解MySQL的函数和约束作用

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 是指一段可以直接被另一段程序调用的程序或代码 🎈字符串拼接函数 🎈把字符串全部变为小写 🎈把字符串全部变为大写 🎈字符串

    2024年02月09日
    浏览(65)
  • 【MySQL从删库到跑路 | 基础第二篇】——谈谈SQL中的DML语句

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 前面我们已经讲解了SQL语句中的DDL语句。今天我们继续来学习SQL的DML语句。

    2024年02月07日
    浏览(53)
  • 【从删库到跑路】MySQL系列——详细讲解SQL的DDL,DML,DQL,DCL语句

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 内容有点多,建议大家先看目录。 建立在关系模型基础上,由多张相互连接的二维表组成的数据库 🏀使用表存储数据,格式统一,

    2024年02月09日
    浏览(57)
  • 看完这篇都有DBA级别的MySQL备份经验了,再也不害怕删库跑路了

            在做运维的路上,相信大家会跟数据库经常打交道吧,那么数据库最重要的时候什么呢,那么肯定是备份了,这篇文章主要内容是介绍了,MySQL的几种常见的备份方式,主要是分为两种,第一种是基于MySQL提供的工具来进行备份,还有一种是基于使用第三方工具来进行

    2024年02月05日
    浏览(51)
  • rm -rf 真是删库跑路的一把好手

    上回书说到《一个月黑风高的夜晚紧急完成gitlab服务器数据迁移》,因为数据迁移后原数据还是存在的,该分区硬盘快满了,进而影响了原目录下的日志存储,既然数据已经迁移到新的路径了,那原来的库直接删掉就好了,往往就是这么不经意间做了一个令人十分后怕的决定

    2024年02月05日
    浏览(41)
  • 微服务技术栈笔记从入门到跑路-SpringCloud+Gateway+Nacos+MQ+ES(保姆级)

    SpringCloud和Dubbo是微服务方案的实现 微服务技术对比 SpringCloud 和SpringBoot版本兼容需要对应 (左侧是SpringCloud的版本,右侧SpringBoot版本。两者版本需要一一对应,否者可能出现兼容性问题) (此笔记基于SpringCloud Hopxton.SR10和SpringBoot2.3.x进行记录) 微服务需要根据业务模块拆分

    2024年02月08日
    浏览(63)
  • 【MySQL 】MySQL 创建数据库, MySQL 删除数据库,MySQL 选择数据库

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: 以下命令简单的演示了创建数据库的过程,

    2024年02月13日
    浏览(92)
  • MySQL数据库:数据库管理系统与安装MySQL数据库

    目录 一、理论 1.数据库管理系统 2.关系型数据库 3.数据库 4.MySQL数据库 5.MySQL部署 二、实验 1.yum安装MySQL 2.编译安装MySQL 3.配置MySQL数据库的Tab补全  三、问题 1.数据库登录报错 2.数据库密码复杂度报错 3.数据库连接报错 四、总结 (1)概念 数据库管理系统(Database Management

    2024年02月12日
    浏览(65)
  • 【MySQL数据库】MySQL数据库管理

    Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。 数据:(data)

    2024年02月08日
    浏览(51)
  • 初识MySQL数据库——“MySQL数据库”

    各位CSDN的uu们你们好呀,小雅兰好久没有更文啦,确实是心有余而力不足,最近学习的内容太难了,这篇博客又是小雅兰的新专栏啦,主要介绍的是一些MySQL数据库的知识点,下面,让我们进入初识MySQL数据库的世界吧 为什么要使用数据库 数据库与数据库管理系统 MySQL介绍

    2024年02月06日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包