我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 索引

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL  索引

MySQL  索引

 

索引的概念

不使用索引,要操作某些行时,需要遍历遍历整张表来找到匹配的行,很花时间,且有点耗资源。

书:目录=>快速定位到指定章节,不用一页一页地找

数据库:索引=>快速定位到指定记录,不用遍历数据表去找,索引相当于数据表的目录

 

 

索引的优缺点

  • 提高查询效率,尤其是记录数超级多的时候,查询速度提升极大(优)
  • 没有遍历数据表的资源开销(优)
  • 索引也是一张表,要占空间,有额外的空间开销(缺)
  • 增改删会同步到索引(维护索引),有额外的时间、资源开销,会降低增改删的效率(缺)

 

 

常见的几种索引

  • 单值索引:索引中只包含数据表的一列(一个字段)
  • 唯一索引:索引中列的每个值必须唯一,一般是数据表的主键列
  • 复合索引:索引中包含数据表的多个列
  • 全文索引:只能对MyISAM引擎的表使用,且索引中的列要是char、varchar、text等文本类型

 

 

索引常用操作

create index index_student on tb_student(id,name);  #创建索引,指定索引名称,要使用哪张表的哪些字段来创建索引

drop index index_student on tb_student; #删除索引

show index from tb_student; #查看某个表上所有的索引

其实不管是索引,还是视图,都很少用命令行来操作,太麻烦,一般都是在数据库管理工具(比如Navicat)中直接操作。

索引是在 表结构|表定义|设计表 中操作的。

 

 

 

索引方式

索引方式有2种:

(1)btree  使用b+树的方式建立索引

比如选择id列来创建索引,假设有7条记录,id 1~7

查找id=7的记录的地址:4 -> 6 -> 7 

一般都是使用btree,因为很多存储引擎都支持btree。InnoDB只支持btree,不支持hash。

 

 

(2)hash   通过hash值一次直接找到记录的地址

比如使用id列建立索引,查找id=7的记录,根据7的hash值直接定位到对应记录的地址。

btree要一级级的找,要通过多个节点;hash一次就找到,查询效率远高于btree。

但hash用得较少,因为只有memory存储引擎支持hash

 

 

 

说明

  • 一张表添加主键时,会自动给主键列创建唯一索引(Unique);添加外键时,会自动给外键列创建普通索引(Normal)。
  • 在数据库管理工具(navicat)中能看到外键自动创建的索引,但看不到主键自动创建的索引;在mysql自带的命令行客户端使用 show index from 表名; 可以看到该表所有的索引,包括主键自动创建的索引。
  • 创建索引后,从表中找匹配的记录时会自动选择合适的索引来使用,不需要我们指定索引。

 

 

 

哪些字段适合创建索引?

  • 主键
  • 外键   这2个不用管,会自动创建
  • 频繁作为条件的字段,比如经常要用where name=" xxx",那就给name字段创建索引
  • group by分组使用的字段
  • order by排序使用的字段
  • 统计(聚合函数)使用的字段

 

 

哪些字段不适合创建索引?

  • 频繁更新(update)的字段。要频繁同步到索引(维护索引),开销很大。
  • 有很多重复值的字段。比如dep_id,tb_student很多记录的dep_id都是相同的。

 

 

哪些表不用创建索引?

  • 记录很少的表
  • 经常进行增删改的表。维护索引开销大

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 索引

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ElasticSearch索引 VS MySQL索引

这段时间在维护产品的搜索功能,每次在管理台看到 elasticsearch 这么高效的查询效率我都很好奇他是如何做到的。

MySQL索引:B+树索引

MySQL索引:B+树索引B+树索引是传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引。B+树索引的构造类似于二叉树,根据键值快速找到数据B树B+树是由B树演化而来的,在了解B+树之前,我们需要对B树有一点认知。B树全称Balance-
MySQL索引:B+树索引
2021-09-01

[MySQL]MySQL索引

[MySQL]MySQL索引 文章目录 [MySQL]MySQL索引1. 索引的概念2. 认识磁盘磁盘的内部结构磁盘中的一个盘片结构定位扇区磁盘随机访问与连续访问 3. MySQL与磁盘交互的基本单位4. 建立共识5. 索引的
2023-08-17

MySQL 索引

索引的概念不使用索引,要操作某些行时,需要遍历遍历整张表来找到匹配的行,很花时间,且有点耗资源。书:目录=>快速定位到指定章节,不用一页一页地找数据库:索引=>快速定位到指定记录,不用遍历数据表去找,索引相当于数据表的目录  索引的优缺点提高查询效率,尤其是记
MySQL  索引
2018-11-30

Mysql 索引

所谓聚簇索引,就是将索引和数据放到一起,找到索引也就找到了数据,B+树索引就是一种聚簇索引,而非聚簇索引就是将数据和索引分开,查找时需要先查找到索引,然后通过索引回表找到相应的数据。InnoDB有且只有一个聚簇索引,而MyISAM中都是非聚簇索引。 更多详细索
2018-06-24

MySQL索引

什么是索引?排好序快速查找的数据结构就是索引索引作用提高检索效率,降低数据库对IO成本;降低数据排序,减少cpu消耗索引类型单值索引:一个索引包含单个列,一个表可以有多个单值索引唯一索引:索引值必须唯一,但允许有空值复合索引:一个索引包含多个列基本语法创建索引
MySQL索引
2015-09-15

Mysql-索引

先创建表mysql> CREATE TABLE test( -> id INT, -> username VARCHAR(16), -> city VARCHAR(16), -> age INT -> );1.普通索引是最基本的索
Mysql-索引
2014-05-24

MySQL索引篇

目录 MySQL索引一、怎么知道一条SQL语句有没有使用索引?二、如何排查慢查询三、索引失效以及为什么失效四、索引为什么能提高查询性能五、为何选择B+树而不是B树六、索引分类七、什么时候创建以及什么时候不需要索引八、索引优化
2023-08-19

mysql之索引

哪些情况需要创建索引 主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引(where 后面的语句) 查询中与其它表关联的字段,外键关系建立索引 单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引) 查询中排
mysql之索引
2016-10-12

mysql的索引

什么是索引帮助Mysql高效获取数据的数据结构索引就是数据结构类似新华字典的索引目录,可以通过索引目录快速查到你想要的字排好序的快速查找数据为什么要建立索引提高查询效率 没有排序之前一个一个往后找 通过索引进行排序之后,可以直接定义到想要的位置排好序的快速查找
mysql的索引
2018-07-12

MySQL 聚集索引和二级索引

Clustered and Secondary Indexes(聚集索引和二级索引)Every InnoDB table has a special index called the clustered index where the data for the
MySQL 聚集索引和二级索引
2022-03-11

MySQL btree索引与hash索引区别

在MySQL中,大多数索引(如 PRIMARY KEY,UNIQUE,INDEX和FULLTEXT)都是在BTREE中存储,但使用memory引擎可以选择BTREE索引或者HASH索引,两种不同类型的索引各自有其不同的使用范围。B树索引具有
2022-05-14

【MySQL】MySQL索引详解

Mysql索引 0.写在前面1.为什么要使用索引2.常见的索引模型3.索引维护4.回表?举例子。 0.写在前面 文章中包含了: 1.什么是索引 2.索引的数据结构,以及各自的使用场景 3.为什么要设置主键自增? 4.基于主键
2023-08-16

编程热搜

目录