《MySQL入门很简单》学习笔记(7)之第7章索引(关键词:数据库/MySQL/索引/设计索引/创建索引/删除索引)
来源:互联网 发布:软件设计师考试准考证 编辑:程序博客网 时间:2024/05/16 05:04
第7章 索引
索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。 索引是提高数据库性能的重要方式。 MySQL中,所有的数据类型都可以被索引。 包括: 普通索引; 唯一性索引; 全文索引; 单列索引; 多列索引; 空间索引等。
7.1 索引简介
索引由数据库表中一列或多列组合而成,其作用是提高对表中数据的查询速度。
7.1.1 索引的含义和特点
索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构。 索引可以提高查询的速度,有效地提高了数据库系统的性能。 通过索引,查询数据时,可以不必读完记录的索引信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。 不同的存储引擎定义了每个表的最大索引数和最大索引长度。 索引有两种存储类型,包括B型树(BTREE)索引和哈希(HASH)索引。 优点: 可以提高检索数据的速度; 对于有依赖关系的子表和父表之间的联合查询时,可以提高查询速度; 使用分组和排序子句进行数据查询时,同样可以显著节省查询中分组和排序的时间。 缺点: 创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加; 索引需要占用物理空间,每一个索引要占一定的物理空间; 增加、删除、修改数据时,要动态的维护索引,造成数据的维护速度降低了。 技巧: 索引可以提高查询的速度,但是会影响插入记录的速度。这是因为,向有索引的表中插入记录时,数据库系统会按照索引进行排序,这样就降低了插入记录的速度。 最好的办法是,先删除表中的索引,然后插入数据,插入完成后,再创建索引。
7.1.2 索引的分类
1.普通索引 在创建普通索引时,不附加任何限制条件。 详细解释见书上。 2.唯一性索引 使用UNIQUE可以设置索引为唯一性索引。 详细解释见书上。 3.全文索引 使用FULLTEXT参数可以设置索引为全文索引。 全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。 详细解释见书上。 4.单列索引 在表中的单个字段上创建索引。 详细解释见书上。 5.多列索引 多列索引是在表的多个字段上创建一个索引。 详细解释见书上。 6.空间索引 使用SPALTIAL参数可以设置索引为空间索引。 详细解释见书上。
7.1.3 索引的设计原则
1.选择唯一性索引 唯一性索引的值是唯一的,可以更快的通过该索引来确定某条记录。 例如: 学生表中学号是具有唯一性的字段。 详细解释见书上。 2.为经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT、UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。 详细解释见书上。 3.为常作为查询条件的字段建立索引 详细解释见书上。 4.限制索引的数目 索引的数目不是越多越好。 每个索引都需要占用磁盘空间,所以越多,需要的磁盘空间就越大。 修改表时,对索引的重构和更新很麻烦。 越多的索引,会使更新表变得很浪费时间。 详细解释见书上。 5.尽量使用数据量少的索引 如果索引的值很长,那么查询的速度会受到影响。 详细解释见书上。 7.尽量使用前缀来索引 详细解释见书上。 8.删除不再使用或者很少使用的索引 详细解释见书上。
7.2 创建索引
创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。 创建索引有3种方式: 创建表的时候创建索引; 在已经存在的表上创建索引; 使用ALTER TABLE语句来创建索引。
7.2.1 创建表的时候创建索引
CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件], ...... 属性名 数据类型 [ UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [别名] (属性名1 [(长度)] [ASC | DESC]) ); 1.创建普通索引 创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT、SPATIAL参数。 详细解释、例子见书上。 2.创建唯一性索引 创建唯一性索引时,需要使用UNIQUE参数进行约束。 详细解释、例子见书上。 3.创建全文索引 只能创建在CHAR、VARCHAR、TEXT类型的字段上。 现在只有MyISAM存储引擎支持全文索引。 详细解释、例子见书上。 4.创建单列索引 单列索引是在表的单个字段上创建索引。 对于字符型的数据,可以不用查询全部信息,而只查询其前面的若干字符信息。 详细解释、例子见书上。 5.创建多列索引 创建多列索引是在表的多个字段上创建一个索引。 详细解释、例子见书上。 6.创建空间索引 创建空间索引时,必须使用SPATIAL参数来设置,表的存储引擎必须是MyISAM类型。 创建空间索引时,表的存储引擎必须使用MyISAM类型。 而且,索引字段必须有非空约束。 详细解释、例子见书上。
7.2.2 在已经存在的表上创建索引
在已经存在的表中,可以直接为表上的一个或几个字段创建索引。 基本形式: CREATE [UNIQUE | FULLTEXT |SPATIAL] INDEX 索引名 ON 表名 (属性名 [(长度)] [ASC | DESC]); 说明: UNIQUE、FULLTEXT、SPATIAL都是可选参数; UNIQUE表示索引为唯一性索引; FULLTEXT表示索引为全文索引; SPATIAL表示索引为空间索引; “INDEX”参数是指需要创建索引的表的名称,该表必须是已存在的,如果不存在,需要先创建; “属性名”参数指定索引对应的字段的名称,该字段必须为前面定义好的字段; “长度”是可选参数,其指索引的长度,必须是字符串类才可以使用; ASC和DESC都是可选参数,ASC表示升序排列,DESC表示降序排列。 1.创建普通索引 2.创建唯一性索引 3.创建全文索引 4.创建单列索引 5.创建多列索引 6.创建空间索引
7.2.3 用ALTER TABLE语句来创建索引
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 (属性名 [(长度)] [ASC | DESC]); 1.创建普通索引 例如: ALTER TABLE example0 ADD INDEX index13_name(name(20)); 2.创建唯一性索引 例如: ALTER TABLE index14 ADD UNIQUE INDEX index14_id(courser_id); 3.创建全文索引 4.创建单列索引 5.创建单列索引 6.创建空间索引
7.3 删除索引
一些不再使用的索引会降低表的更新速度,影响数据库的性能。对于这样的索引,应该将其删除。 基本形式: DROP INDEX 索引名 ON 表名;
7.6 常见问题及解答
1.MySQL中索引、主键和唯一性的区别是什么? 2.表中建立了索引之后,导入大量数据为什么很慢?
参考文献:
1.《MySQL入门很简单》。
阅读全文
0 0
- 《MySQL入门很简单》学习笔记(7)之第7章索引(关键词:数据库/MySQL/索引/设计索引/创建索引/删除索引)
- MySQL数据库索引:删除、查看、创建索引
- mysql 创建索引,删除索引,查看索引
- 《MySQL入门很简单》学习笔记(24)之自问自答(关键词:数据库/MySQL/外键/索引/联合查找/视图/触发器)
- MySQL入门很简单-学习笔记 - 第7章 索引
- MySQL 创建索引、重建索引、查询索引、删除索引
- mysql 创建索引(联合索引)
- mysql 索引类型及创建索引(普通索引、唯一索引、主键索引、复合索引、全文索引)
- MySql笔记(索引)
- mysql学习笔记之三(索引)
- mysql 创建索引和删除索引
- mysql 创建索引和删除索引
- mysql 创建索引和删除索引
- mysql索引学习----2----创建索引、修改索引、删除索引的命令语句
- MySQL入门很简单-索引
- Mysql之索引入门
- MySQL入门之索引
- MySQL之索引学习笔记
- 实现一个单例模式的类,要求线程安全
- 653. Two Sum IV
- PAT_A 1048. Find Coins (25)
- Oracle高级优化——侵入存储提纲(用PRIVATE OUTLINE)
- Java中的Null是什么?
- 《MySQL入门很简单》学习笔记(7)之第7章索引(关键词:数据库/MySQL/索引/设计索引/创建索引/删除索引)
- Hadoop-Invert-Index
- CodeForces 339 A.Helpful Maths(水~)
- android studio 解决依赖库冲突问题
- PAT 1064. Complete Binary Search Tree (30) 快速建立完全二叉树
- 二维码生成以及扫一扫解析二维码原理
- Laravel 关联表模型和多对多关系
- 一个经典例子让你彻彻底底理解java回调机制
- 简单的循环队列实现 不足之处请留言指出