前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL索引优化系列(1)—索引介绍

MySQL索引优化系列(1)—索引介绍

作者头像
公众号 IT老哥
修改2020-09-21 15:26:35
7160
修改2020-09-21 15:26:35
举报

本文源自 公-众-号 IT老哥 的分享

IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章

此后会针对数据库索引出一系列的文章,敬请期待

前言—学习索引几大理由

  • 高薪程序员必备知识,无论去哪里面试,数据库的索引优化是必考知识
  • 工作必备,无论任何系统都要和数据库打交道,当数据量达到百万级以上,查询速度就会变慢,影响数据库的并发,从而影响整体的系统并发
  • 不会数据库索引的程序员,不是一个合格的程序员

所以快来学习索引吧,哈哈

索引是什么

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高校获取数据的数据结构。

可以得到索引的本质:索引是数据结构,索引的目的是提高查询效率,可以类比英语新华字典,如果我们要查询MySQL这个单词,首先我们需要在目录(索引)定位到M,然后在定位到y,以此类推找到SQL。

如果没有索引呢,那就需要从A到Z,去遍历的查找一遍,直到找到我们需要的,一个一个找和直接根据目录定位到数据,是不是差的天壤之别呢,这就是索引的妙用。

索引底层数据结构

当数据量大的时候,索引的数据量也很大,所以索引不可能全部放到内存中,因此索引一般以文件的形式存储到硬盘上。

数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些结构以某种方式指向数据,这样就可以基于这些数据结构实现高级查找算法。

索引算法种类

  • B-tree索引(重点掌握,之后文章详细讲解)
  • Hash索引
  • full-text索引
  • R-tree索引

索引的优势

  • 类似大学图书馆书目索引,提高数据检索效率,降低数据库IO成本
  • 通过索引列对数据进行排序,降低数据排序成本,降低了CPU消耗

索引的劣势

  • 实际上索引也是一张表,该表保存了主键和索引字段,并指向实体表的记录,所以索引列也是要占用空间的
  • 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如果对表INSERT,UPDATE和DELETE。因为更新表时,MySQL不仅要不存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息
  • 索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立优秀的索引,或优化查询语句

索引分类

  • 单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
  • 唯一索引:索引列的值必须唯一,但允许有空值
  • 复合索引:即一个索引包含多个列

索引语法

代码语言:javascript
复制
创建一:create [unique] index indexName on tableName (columnName (length) )。

BLOB和TEXT类型,必须指定length。

代码语言:javascript
复制
创建二:alter tableName add [unique] index [indexName] on (columnName (length) )
代码语言:javascript
复制
删除:DROP INDEX [indexName] ON mytable;
查看:SHOW INDEX FROM table_name\G

哪些情况需要建索引

  • 主键自动建立唯一索引
  • 频繁作为查询的条件的字段应该创建索引
  • 查询中与其他表关联的字段,外键关系建立索引
  • 频繁更新的字段不适合创建索引:因为每次更新不单单是更新了记录还会更新索引,加重IO负担
  • Where条件里用不到的字段不创建索引
  • 单间/组合索引的选择问题(在高并发下倾向创建组合索引)
  • 查询中排序的字段,若通过索引去访问将大大提高排序的速度
  • 查询中统计或者分组字段

哪些不适合建索引

  • 表记录太少
  • 经常增删改的表
  • 数据重复且分布平均的表字段,因此应该只为经常查询和经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

云服务器云硬盘数据库(包括MySQL、Redis、MongoDB、SQL Server),CDN流量包,短信流量包,cos资源包,消息队列ckafka,点播资源包,实时音视频套餐,网站管家(WAF),大禹BGP高防(包含高防包及高防IP),云解析SSL证书,手游安全MTP移动应用安全云直播等等。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT老哥 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文源自 公-众-号 IT老哥 的分享
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档