| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL中的索引 -> 正文阅读 |
|
[大数据]MySQL中的索引 |
在MySQL中,索引类似于书籍的目录,如果想要快速访问数据表中的特定信息,可以建立索引加快数据查询效率。 索引概述索引是数据库中用来提高数据查询效率最常用的数据库对象,好比新华字典的音序表,通过音序表可以快速的查找内容。索引对数据表中一列或多列的值与记录行之间按照一定的顺序建立关系,以提高对数据表中数据的查询速度。 根据索引实现语法不同,MySQL中常见的索引大致分为5种,具体描述如下: 1、普通索引是MySQL中的基本索引类型,使用KEY或INDEX定义,不需要添加任何限制条件。 2、创建唯一性索引的字段,允许有NULL值,但需要保证索引对应字段中的值是唯一的。 3、主键索引是一种特殊的唯一性索引,用于根据主键自身的唯一性标识每一条记录。主键索引的字段不允许有NULL值。 4、全文索引主要用于提高在数据量较大的字段中的查询效率。 5、空间索引只能创建在空间数据类型的字段上。 上述5种索引可以在一列或多列字段上进行创建,根据创建索引的字段个数,可以将索引分为单列索引和复合索引,具体介绍如下: 1、单列索引指的是在表中单个字段上创建索引,它可以是普通索引、唯一索引或者全文索引,只要保证该索引只对应表中一个字段即可。 2、复合索引指的是在表中多个字段上创建一个索引,并且只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。 需要注意的是,虽然索引可以提高数据的查询速度,但索引会占用一定的磁盘空间,并且在创建和维护索引时,其消耗的时间是随着数据量的增加而增加的。因此,使用索引时,应该综合考虑索引的优点和缺点。 索引的创建创建数据表的同时创建索引
上述语法格式中各选项的含义如下所示: (1){INDEX | KEY}:INDEX 和KEY为同义词,表示索引,二者选一即可。 (2)索引名:可选项,表示为创建的索引定义的名称,不使用该选项时,默认使用建立索引的字段表示,复合索引则使用第一个字段的名称作为索引名称。 (3)索引类型:可选项,某些存储引擎允许在创建索引时指定索引类型,使用语法是USING {BTREE | HASH},不同的存储引擎支持的索引类型也不同。 (4)UNIQUE:可选项,表示唯一性索引。 (5)FULLTEXT:表示全文索引。 (6)SPATIAL:表示空间索引。? 下面通过案例演示如何在创建数据表dept_index时,创建单列的普通索引、唯一性索引、主键索引、全文索引和空间索引。
显示创建数据表index_normal的语句:
?结果:
上述案例只是为了演示创建数据表时创建单列索引,真实开发中一般不会为字段都加索引,需要避免过度使用索引,因为索引不仅会占用一定的物理空间,而且当对数据表中的数据进行增加、删除和修改时,也会需要动态维护索引,导致数据库的写性能降低和减缓数据表的修改速度。 下面对创建数据表时,创建复合索引进行演示。 例如,创建数据表index_multi,在数据表中的id和name字段上建立索引名为multi的普通索引,具体SQL语句如下所示。
通过SHOW CREATE TABLE语句查看数据表index_multi的创建信息:
?结果:
需要注意的是,复合索引中,多个字段的设置顺序要准守“最左前缀原则”,也就是在创建索引时,把使用频繁最高的字段放在索引字段列表的最左边,次频繁使用的字段放在设计索引字段列表的第二位,以此类推。? 在已有的数据表上创建索引若想在一个已经存在的数据表上创建索引,可以使用CREATE INDEX语句,CREATE INDEX语句创建索引的具体语法格式如下所示。
在上述语法格式中,UNIQUE、FULLTEXT和SPATIAL都是可选参数,分别用于表示唯一性索引、全文索引和空间索引。 为了便于读者更好的观察CREATE INDEX语句创建索引的结果,下面先创建一个新数据表dept_index02,创建dept_index02表的SQL语句如下所示。
?根据CREATE INDEX语句中字段列表的个数,可将创建的索引分为单列索引和复合索引,下面针对这两种情况分别进行讲解。 通过CREATE INDEX语句可以创建普通索引、唯一性索引、全文索引和空间索引。由于创建索引的格式都一样,此处以创建唯一性索引为例,演示单列索引的创建。 例如,在数据表dept_index02中的id字段上,建立一个名称为unique_id的唯一性索引,具体SQL语句及执行结果如下所示。
下面通过SHOW CREATE TABLE语句查看数据表book的创建信息,以验证id字段上是否成功创建索引,具体SQL语句:?
下面使用CREATE INDEX语句创建复合索引。 例如,在dept_index02表中的deptno字段和dname字段上,创建一个名称为multi_index的复合索引,具体SQL语句如下所示:
验证:
修改数据表的同时创建索引在已经存在的数据表中创建索引,除了可以使用CREATE INDEX语句外,还可以使用ALTER TABLE语句。使用ALTER TABLE语句在修改数据表的同时创建索引,其基本语法格式如下所示。
为了便于读者更好的查看ALTER TABLE语句创建索引的结果,下面创建一个新的数据表dept_index03,创建数据表dept_index03的SQL语句如下所示:
根据ALTER TABLE语句中索引作用字段列表的个数,可将创建的索引分为单列索引和复合索引,下面针对这两种情况分别进行讲解。 下面以创建唯一性索引为例,演示使用ALTER TABLE语句创建单列索引。 例如,在数据表dept_index03中的id字段上,创建名称为index_id的唯一性索引,具体SQL语句如下所示:
验证:
需要注意的是,创建唯一性索引时,需要确保数据表中的数据不存在重复的值,否则会出错。 上面使用ALTER TABLE语句创建的普通索引、唯一性索引、全文索引和空间索引都是对数据表中的单列字段设定的索引。下面使用ALTER TABLE语句演示复合索引的创建。 例如,在dept_index03表中的deptno字段和dname字段上,创建一个名称为multi_index的复合唯一性索引,具体SQL语句如下所示:
验证:
?查看索引及其使用情况
上述语法格式中,使用INDEXES、INDEX、KEYS含义都一样,都可以查询出数据表中所有的索引信息。 举例:
结果:
?索引信息字段的含义
在MySQL中除了可以查看数据表中的索引信息,还可以通过EXPLAIN关键字分析SQL语句的执行情况,例如分析SQL语句执行时是否使用了索引。EXPLAIN可以分析的语句有SELECT、UPDATE、DELETE、INSERT和REPLACE。 下面以查询数据表dept_index中id为1的部门信息为例分析语句的执行情况,具体如下。 (1)先往数据表dept_index中插入数据,具体SQL语句如下所示。
?(2)使用EXPLAIN关键字查看查询语句的执行情况,具体SQL语句及如下所示。
结果:
分析执行语句的字段
索引的删除由于索引会占用一定的磁盘空间,所以为了避免影响数据库性能,应该及时删除不再使用的索引。在MySQL中,可以使用ALTER TABLE语句或DROP INDEX语句删除索引。下面分别讲解这两种索引删除方式。 使用ALTER TABLE删除索引
例如,通过ALTER TABLE语句删除删除数据表dept_index中名称为introduction的全文索引,具体SQL如下所示。
?使用DROP INDEX删除索引
例如,删除数据表dept_index中名称为dname的索引,具体SQL语句如下所示。
上机实践:图书管理系统中索引的应用# 在图书表book的图书名称name上创建一个索引index_bookname # 在图书名称name和图书状态state上建立一个索引index_bookname_state # 删除索引index_bookname_state |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 10:28:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |