前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL高手练成之路-索引分类

MySQL高手练成之路-索引分类

作者头像
小冷
发布2023-05-24 17:57:02
4140
发布2023-05-24 17:57:02
举报
文章被收录于专栏:小冷coding小冷coding

MySQL索引优缺点

索引优点:

  • 提高数据检索的效率,降低数据库的IO成本。
  • 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

索引缺点:

  • 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为 更新所带来的键值变化后的索引信息。
  • 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。

MySQL索引分类

聚簇索引和非聚簇索引

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。术语‘聚簇’表示数据行和相邻的键值聚簇的存储 在一起。

图中,左侧的索引就是聚簇索引,因为数据行在磁盘的排列和索引排序保持一致的

聚簇索引的好处:按照聚簇索引排列顺序,查询显示一定范围数据的时候,由于数据都是紧密相连,数据库不用从多 个数据块中提取数据,所以节省了大量的 io 操作。

聚簇索引的限制:对于mysql 数据库目前只有 innodb 数据引擎支持聚簇索引,而 Myisam 并不支持聚簇索引。 由于数据物理存储排序方式只能有一种,所以每个 Mysql 的表只能有一个聚簇索引。一般情况下就是 该表的主键。

为了充分利用聚簇索引的聚簇的特性,所以 innodb 表的主键列尽量选用有序的顺序 id,而不建议用 无序的 id,比如 uuid 这种。

索引的创建原则

在MySQL数据库中使用索引,虽然能够提高数据的查询性能,但是创建的索引并不是越多越好,而需要遵循一定的设计原则。

1.尽量使用小的数据类型的列创建索引

数据类型越小,所占用的存储空间越小,不仅能够节省系统的存储空间,而且处理效率也会更高。例如,同样是整数类型,能够使用TINYINT类型时,就尽量不要使用INT类型。

2.尽量使用简单的数据类型的列创建索引

处理简单的数据类型比复杂的数据类型,系统开销小,因为数据类型越复杂,执行数据的比较操作时采取的比较操作也就越复杂。例如,INT类型与VARCHAR类型,INT类型的数据互相比较时,使用比较运算符直接进行比较即可;VARCHAR类型的数据互相比较时,需要将每个字符转化成对应的ANSI码,再进行比较。

3.尽量不要在NULL值字段上创建索引

在NULL值字段上创建索引,会使索引、索引的统计信息和比较运算更加复杂。因此在创建数据表时,尽量不要使字段的默认值为NULL,将字段设置为NOT NULL,并赋予默认值。

适合创建索引的场景

在MySQL的实际应用中,有一些使用场景适合在数据表中创建索引,总结如下:

1.必须为数据表中的主键和外键添加索引。

2.数据表中的数据达到一定量级时,应当为数据表适当添加索引。

3.与其他表进行关联的字段,并且经常进行关联查询时,应当为连接字段创建索引。

4.作为WHERE子句的条件判断字段,并且经常用来进行相等比较操作的字段,应当添加索引。

5.作为ORDER BY语句的字段,并且经常用来执行排序操作的字段,应当添加索引。

6.作为搜索一定范围内的字段,并且经常用来执行查询操作,应当添加索引。

索引有很多种类:

创建唯一索引

索引列的值必须唯一,但允许有空值。如果创建的唯一索引中包含多个字段,也就是复合索引,则索引中包含的多个字段的值的组合必须唯一。

创建主键索引

设定为主键后数据库会自动建立索引,innodb为聚簇索引。主键索引是特殊类型的唯一索引,与唯一索引不同的是,主键索引不仅具有唯一性,而且不能为空,而唯一索引中的列的数据可能为空。

创建单列索引

单列索引表示在创建的索引中,只包含数据表中的单个字段或列。MySQL中,支持在一张数据表中创建多个单列索引。

创建复合索引

即一个索引包含多个列,MySQL中,同样支持在一张数据表中创建多个组合索引。在使用组合索引查询数据时,MySQL支持最左匹配原则。

创建普通索引

1.使用CREATE TABLE语句创建普通索引

2.使用CREATE INDEX语句创建普通索引

创建全文索引

创建全文索引时,对列的数据类型有一定的限制,只能为定义为CHAR、VARCHAR和TEXT数据类型的列创建全文索引,全文索引不支持对列的局部进行索引。

创建空间索引

MySQL 支持在GEOMETRY数据类型的字段上创建空间索引。例如,创建名称为t8的数据表,并为t8数据表中的t_location字段创建空间索引。

代码语言:javascript
复制
 CREATE TABLE t8 (id INT NOT NULL,t_location GEOMETRY NOT NULL,  
   SPATIAL INDEX geo_index(t_location));
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小冷coding 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL索引分类
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档