前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL高级--性能优化之索引

MySQL高级--性能优化之索引

原创
作者头像
Java学术趴
发布2022-11-16 13:48:36
4590
发布2022-11-16 13:48:36
举报
文章被收录于专栏:Java全栈·Java全栈·

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。

☠️每日毒鸡汤:一件事你犹豫去不去做,那就是该立即动身做的。

1. 索引优化分析

1.1 手写SQL和机读SQL

机器读的SQL和我们写的SQL是不一样的。

几种表关联方式

1.2 索引

1.2.1 索引概念
  • 索引(index)是帮助 MySQL高效查询获取数据的数据结构。
  • 索引的本质:索引是数据结构,是一种排好序的快速查找数据结构。
  • 索引的目的在于提高查询效率,可以类比字典,如果要查”mysql“这个单词,我们肯定需要定位到 m 字母,然后从上往下找y字母,在找到剩下的 sql。如果没有索引,那么你可能需要 a---z 依次查询。
  • 索引之所以查的快是因为已经排序好了,所以查询的速度比较快。
  • 在数据之外, 数据库系统还维护着满足特定查找算法的数据结构, 这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。

左边是数据表,一共两列七条记录,最左边的是数据记录的物理地址。

1.2.2 索引的分类
  • 单一索引: 即一个索引只包含单个列,一个表可以有多个单列索引。
  • 唯一索引: 索引列的值必须唯一,但允许为空。
  • 复合索引: 即一个索引包含多个列。
1.2.3 MySQL索引结构
  • BTree索引: 检索过程
  • Hash索引
  • full-text
  • R-Tree索引
1.3.4 适合创建索引的场景
  • 主键自动建立一个唯一索引。
  • 频繁作为查询条件的字段应该创建索引。
  • 查询中与其他表关联的字段,外键关系建立索引。
  • 频繁更新的字段不适合创建索引(因为每次更新不单单的更新表中的数据,还要更新索引)
  • where条件里用不到的字段不创建索引。
  • 单键/组合索引的选择问题?(一般在高并发的情况下倾向创建组合索引)
  • 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度(原始数据已经排序好了,不用在使用索引进行排序)
  • 查询中统计或者分组字段(分组的前提是数据已经排序好了,既然排序就与索引息息相关)
1.3.5 不适合创建索引的场景
  • 表记录少:原始数据很少,不需要索引查询的速度也非常快。
  • 经常增、删、改的表:提高查询速度的同时,在进行数据增删改的操作时, 操作原始数据的同时还需要操作索引文件,会占用大量的性能。
  • 数据重复且分布平均的表字段:索引一般使用在经常查询和经常排序的字段。如果某个字段存在大量重复的元素,为它建立索引就没有太大的意义。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 索引优化分析
    • 1.1 手写SQL和机读SQL
      • 1.2 索引
        • 1.2.1 索引概念
        • 1.2.2 索引的分类
        • 1.2.3 MySQL索引结构
        • 1.3.4 适合创建索引的场景
        • 1.3.5 不适合创建索引的场景
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档