首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
11.1 索引概述
11.1.1 MySQL索引概述
11.1.2 MySQL索引分类
11.2 创建索引
11.2.1 在建立数据表时创建索引
11.2.2 在已建立的数据表中创建索引
11.2.3 修改数据表结构以为数据表添加索引
11.3 删除索引
12.1 视图概述
12.1.1 视图的概念
12.1.2 视图的作用
12.2 创建视图
12.2.1 查看创建视图的权限
12.2.2 创建视图
12.2.3 创建视图的注意事项
12.3 视图操作
12.3.1 查看视图
12.3.2 修改视图
12.3.3 更新视图
12.3.4 删除视图
第13章 数据完整性约束
13.1 定义完整性约束
13.1.1 实体完整性
13.1.2 参照完整性
13.1.3 用户定义完整性
13.2 命名完整性约束
13.3 更新完整性约束
13.3.1 删除完整性约束
13.3.2 修改完整性约束
第14章 存储过程与存储函数
14.1 创建存储过程和存储函数
14.1.1 创建存储过程
14.1.2 创建存储函数
14.1.3 变量的应用
14.1.4 光标的应用
14.2 调用存储过程和存储函数
14.2.1 调用存储过程
14.2.2 调用存储函数
14.3 查看存储过程和存储函数
14.3.1 SHOW STATUS语句
14.3.2 SHOW CREATE语句
14.4 修改存储过程和存储函数
14.5 删除存储过程和存储函数
15.1 MySQL触发器
15.1.1 创建MySQL触发器
15.1.2 创建具有多条执行语句的触发器
15.2 查看触发器
15.2.1 SHOW TRIGGERS语句
15.2.2 查看triggers表中触发器信息
15.3 使用触发器
15.3.1 触发器的执行顺序
15.3.2 使用触发器维护冗余数据
15.4 删除触发器
第16章 事务
16.1 事务机制
16.1.1 事务的概念
16.1.2 事务机制的必要性
16.1.3 关闭MySQL自动提交
16.1.4 事务回滚
16.1.5 事务提交
16.1.6 MySQL中的事务
16.1.7 回退点
16.2 锁机制
16.2.1 MySQL锁机制的基本知识
16.2.2 MyISAM表的表级锁
16.2.3 InnoDB表的行级锁
16.2.4 死锁的概念与避免
16.3 事务的隔离级别
16.3.1 事务的隔离级别与并发问题
16.3.2 设置事务的隔离级别
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(四)
小册名称:MySQL从入门到精通(四)
### 11.2.1 在建立数据表时创建索引 在MySQL数据库管理中,索引是提高数据检索效率的重要手段之一。它允许数据库系统以比全表扫描更快的方式定位到表中的特定行。索引可以极大地加速数据检索过程,减少数据库的I/O操作,是优化数据库性能不可或缺的工具。本章将详细探讨在建立数据表时如何创建索引,包括索引的基本概念、类型、创建方法以及最佳实践。 #### 11.2.1.1 索引的基本概念 索引是对数据库表中一列或多列的值进行排序的一种数据结构,通过索引可以快速访问数据库表中的特定信息。没有索引的数据库表就像是未分类的书籍,查找信息需要逐页翻阅;而有索引的表则像是图书馆的目录,可以快速定位到所需信息的位置。 索引的主要作用包括: - **加快数据检索速度**:通过索引,数据库系统可以快速定位到表中的某一行,减少了对全表的扫描。 - **加速表与表之间的连接**:在执行JOIN操作时,如果连接条件上有索引,可以显著提高查询速度。 - **保证数据的唯一性**:唯一索引可以确保表中每一行数据的唯一性,常用于主键或唯一约束。 - **优化排序和分组操作**:索引可以帮助数据库系统更有效地执行排序(ORDER BY)和分组(GROUP BY)操作。 #### 11.2.1.2 索引的类型 MySQL支持多种类型的索引,以满足不同的性能需求。常见的索引类型包括: - **B-Tree索引**:MySQL中最常用的索引类型,适用于全键值、键值范围或键值前缀查找。大多数存储引擎(如InnoDB和MyISAM)都默认使用B-Tree索引。 - **哈希索引**:基于哈希表的实现,只支持等值比较查询,不支持范围查询。在Memory存储引擎中默认使用哈希索引。 - **全文索引**:用于搜索文本中的关键词,而不是直接比较索引中的值。适用于大量文本的搜索。 - **空间索引**:用于地理空间数据类型,支持空间数据的存储和查询。 #### 11.2.1.3 在建立数据表时创建索引 在MySQL中,创建索引可以在数据表创建时直接进行,也可以在表创建后通过ALTER TABLE语句或CREATE INDEX语句添加。本节重点介绍在建立数据表时如何创建索引。 ##### 1. 使用CREATE TABLE语句创建索引 在创建表时,可以在列定义后直接使用`INDEX`、`UNIQUE`、`FULLTEXT`或`SPATIAL`关键字来指定索引类型,并为其命名(可选)。下面是一个示例,展示了如何在创建表时同时创建B-Tree索引和唯一索引: ```sql CREATE TABLE employees ( id INT AUTO_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, -- 创建唯一索引 department_id INT, salary DECIMAL(10, 2), INDEX idx_name (name), -- 创建普通索引 PRIMARY KEY (id) -- 主键索引,自动创建 ) ENGINE=InnoDB; ``` 在上述示例中,`email`列被设置为唯一索引,这保证了表中每个员工的邮箱地址都是唯一的。同时,为`name`列创建了一个名为`idx_name`的普通索引,以便加速基于员工姓名的查询。`id`列作为主键,自动创建了一个主键索引。 ##### 2. 索引的命名 在创建索引时,为其指定一个有意义的名称是一个好习惯。这有助于在后续维护数据库时,更容易地识别和理解索引的用途。如果不指定索引名称,MySQL将自动生成一个名称,但这通常不够直观。 ##### 3. 索引的选择策略 在决定为哪些列创建索引时,需要考虑以下几个因素: - **查询频率**:经常作为查询条件的列应该创建索引。 - **数据唯一性**:数据唯一性高的列适合创建唯一索引。 - **数据区分度**:索引列的区分度越高,索引的效果越好。 - **索引的维护成本**:虽然索引可以加快查询速度,但也会增加插入、删除和更新操作的成本,因为索引本身也需要被更新。 ##### 4. 索引的使用注意事项 - **避免过度索引**:索引虽好,但并非越多越好。过多的索引会占用更多的磁盘空间,并增加写操作的负担。 - **注意索引的列顺序**:在复合索引中,列的顺序对查询性能有很大影响。应该根据查询条件中最常用的列顺序来定义索引。 - **利用前缀索引**:对于较长的字符串列,可以考虑使用前缀索引来减少索引的大小,提高索引效率。 #### 11.2.1.4 总结 在MySQL中,索引是提高数据库性能的关键技术之一。通过在建立数据表时合理地创建索引,可以显著提高数据检索的速度,优化数据库的整体性能。然而,索引并非万能的,需要根据实际的查询需求和数据特点来合理选择索引类型和索引列。同时,也需要注意索引的维护成本,避免过度索引带来的负面影响。 通过本章的学习,读者应该能够掌握在MySQL中创建索引的基本方法,了解不同类型的索引及其适用场景,以及如何在数据表建立时合理地规划索引策略。这将为后续的数据库性能优化工作打下坚实的基础。
上一篇:
11.2 创建索引
下一篇:
11.2.2 在已建立的数据表中创建索引
该分类下的相关小册推荐:
MySQL从入门到精通(一)
MySQL从入门到精通(五)
MySQL8.0入门与实践
MySQL从入门到精通(三)
MySQL 实战 45 讲
MySQL必会核心问题
细说MySQL(零基础到高级应用)
MySQL从入门到精通(二)
SQL零基础到熟练应用(增删改查)