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

MySQL之索引基础

作者头像
AsiaYe
发布2019-11-06 16:19:29
3640
发布2019-11-06 16:19:29
举报
文章被收录于专栏:DBA随笔DBA随笔
MySQL之索引基础
索引是应用程序设计和开发的一个重要方面,过多的索引会影响程序的性能,而索引过少又会对查询性能产生影响,要找到一个合适的平衡点,并不是一件容易的事情。

innodb存储引擎支持B+树索引、全文索引以及哈希索引等常见的几种索引。需要注意的是,Innodb存储引擎支持的哈希索引是自适应的,Innodb存储引擎会根据表的使用情况自动为表生成哈希索引。B+树索引就是传统意义上的索引,它的构造类似于二叉树,根据key value键值对快速找到数据。

01

索引的优缺点

索引的优点很多,这里简单列举几条:

(1)使用唯一索引可以保证数据库表中的每行数据的唯一性;

(2)可以大大加快数据的查询速度;

(3)在实现数据的参考完整性方面,可以加速表和表之间的关联;

(4)在使用分组和排序自居进行数据查找时,可以显著减少查询中分组和排序的时间

过多的索引还会带来以下缺点:

(1)创建索引和维护索引需要耗费时间,并且随着数据量的增加所耗费的时间也会增加;

(2)索引需要占用磁盘空间,除了数据表占用磁盘空间之外,每一个索引还要占用一定的物理空间,如果有大量的索引,索引文件可能比数据文件还大;

(3)当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,降低了数据的维护速度。

02

索引的简单分类

索引的分类可以简单分为以下几种:

(1)普通索引和唯一索引

普通索引是MySQL中基本索引类型,允许在定义索引的列中插入重复值和空值;

CREATE TABLE book
(
bookid                INT NOT NULL,
bookname              VARCHAR() NOT NULL,
authors                VARCHAR() NOT NULL,
info                   VARCHAR() NULL,
comment               VARCHAR() NULL,
year_publication       YEAR NOT NULL,
INDEX(year_publication)
);

唯一索引指的是索引列的值必须唯一,但是允许有控制,如果是组合索引,则列值的组合必须为宜;

CREATE TABLE t1
(
id    INT NOT NULL,
name CHAR() NOT NULL,
UNIQUE INDEX UniqIdx(id)
);

主键索引是一种特殊的唯一索引,不允许有空值;

(2)单列索引和组合索引

单列索引指的是一个索引只包含一个列,一个表可以有多个单列索引;

CREATE TABLE t2
(
id   INT NOT NULL,
name CHAR() NULL,
INDEX SingleIdx(name())
);

组合索引值得是在多个字段上组合创建索引,只有在查询条件中使用了这些字段左边的字段时,索引才会被使用。

CREATE TABLE t3
(
id    INT NOT NULL,
name CHAR()  NOT NULL,
age  INT NOT  NULL,
info VARCHAR(),
INDEX MultiIdx(id, name, age())
);

(3)全文索引

全文索引在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值,全文索引可以在char,varchar,text类型的列上创建。MyISAM存储引擎支持全文索引;

CREATE TABLE t4
(
id    INT NOT NULL,
name CHAR() NOT NULL,
age  INT NOT NULL,
info VARCHAR(),
FULLTEXT INDEX FullTxtIdx(info)
) ENGINE=MyISAM;

(4)聚集索引与非聚集索引

聚集(clustered)索引,也叫聚簇索引,类似字典中的拼音查询,它的定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。MySQL里主键就是聚集索引。它的特点是非空,唯一。

非聚集(unclustered)索引,类似字典中的偏旁部首查询。它的定义:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。

关于这两种索引,后续会再进行分析。

(5)空间索引是对空间数据类型的字段建立的索引,这个不经常使用,这里不做赘述。

03

索引的设计原则

索引设计不合理或者缺少索引都会对数据库的性能造成障碍,高效的索引对于获得良好的性能十分重要,设计索引时考虑的准则大概有以下几种:

(1)索引不是越多越好,过多的索引维护起来不方便,而且占用磁盘空间;

(2)避免对经常更新的表进行过多的索引,而对于经常查询的字段,需要创建索引,但是要避免添加不必要的字段;

(3)数据量小的表最好不用索引,由于数据量小,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果;

(4)在不同值较多的列上建立索引,如果一个列是性别属性,那么最好不要建立索引,因为该字段只有两个不同值;

(5)当唯一性是某种数据本身的特征时,指定唯一索引,使用唯一索引能够确保定义的列的数据的完整性,从而提高查询速度。

(6)在频繁进行排序或者分组的列上简历索引,如果待排序的列有多个,可以在这些列上建立组合索引。

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

本文分享自 DBA随笔 微信公众号,前往查看

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

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

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