数据库之索引篇
概述
- 索引简介
- 创建索引
- 删除索引
一、索引简介
-
什么是索引?
- 索引是对数据表中一列或多列的值进行排序的一种结构,可提高特定数据的查询速度。
- 索引是一个单独的、存储在磁盘上的数据库结构,包含着数据表里所有记录的引用指针。
-
索引的优点
- 通过创建唯一索引,可以保证数据表中每一行数据的唯一性;
- 加快数据的查询速度,这是创建索引的主要原因;
- 实现数据的参考完整性,加速表与表之间的连接;
- 减少分组查询中分组和排序的时间。
-
索引的缺点
- 创建、维护索引要耗费时间,随数据量的增减而增加;
- 索引占用磁盘空间,索引文件可能比数据文件更快达到最大文件尺寸;
- 对表中数据进行更新、修改和删除操作的时候,索引也要动态地维护,这会降低数据的维护速度。
-
索引的分类
-
普通索引和唯一索引
基本索引:允许索引列有重复值和空值。
唯一索引:索引列的值必须唯一,但允许控制。主键索引属于特殊的唯一索引,列值不允许有空值。
-
单列索引和组合索引
单列索引:一个索引只包含单个列,一个表可以有多个单列索引。
组合索引:多个字段组合上创建索引,使用时遵循最左前缀集合。
- 全文索引:用于全文搜索,FULLTEXT,可重复,允许空值。
- 空间索引:空间数据类型的字段上建立的索引,非空。
-
-
索引设计原则
-
索引并非越多越好:占空间、影响INSERT/UPDATE/DELETE等操作;
-
数据量小的表最好不使用索引,查询时间可能短于遍历索引的时间;
-
尽可能在不同值多的列上建立索引,这有利于提高查询效率;
-
唯一性列指定唯一索引;
-
对频繁进行排序或分组的列(组合)上建立索引。
-
二、创建索引
-
创建表时建立索引(INDEX 或 KEY)
-
创建普通索引
CREATE TABLE book ( bookid INT NOT NULL, bookname VARCHAR(225) NOT NULL, authors VARCHAR(225) NOT NULL, info VARCHAR(225) NULL, comment VARCHAR(225) NULL, year_pabulication YEAR NOT NULL, INDEX(year_pabulication) ); -- 可使用EXPLAIN语句查看索引是否正确使用
-
创建唯一索引(UNIQUE INDEX)
CREATE TABLE t1 ( id INT NOT NULL, name CHAR(30) NOT NULL, UNIQUE INDEX UniqIdx(id) ); -- 在id字段上创建一个名为UniqIdx的唯一索引
-
创建单列索引
CREATE TABLE t2 ( id INT NOT NULL, name CHAR(50) NULL, INDEX SingleIdx(name(20)) ); -- 在id字段上创建一个名为UniqIdx的单列索引,长度为20
-
创建组合索引
CREATE TABLE t3 ( id INT NOT NULL, name CHAR(30) NOT NULL, age INT NOT NULL, info VARCHAR(225), INDEX MutiIdx(iid,name,age(100)) ); -- 在iid,name,age上创建名为MutiIdx的组合索引 -- 组合索引使用时遵循“最左前缀”
-
创建全文索引
CREATE TABLE t4 ( id INT NOT NULL, name CHAR(30) NOT NULL, age INT NOT NULL, info VARCHAR(225), FULLTEXT INDEX FullTxtIdx(info) ); -- 在info字段上创建名为FullTxtIdx的FULLTEXT索引
-
创建空间索引
必须在MyISAM类型的表中创建,非空
CREATE TABLE t5 ( g GEOMETRY NOT NULL, SPATIAL INDEX spatIdx(g) ); -- 在g字段上创建名为spatIdx的空间索引
-
-
在已有表上建立索引(ALTER TABLE 或 CREATE INDEX)
-
使用ALTER TABLE创建索引
-- 基本语法 ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name[length],...) [ASC|DESC]
-
使用CREATE INDEX创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (col_name[length],...) [ASC|DESC]
-
三、删除索引
-
使用ALTER TABLE删除索引
ALTER TABLE tabe_name DROP INDEX index_name; -- 注:添加AUTO-INCREMENT约束字段的唯一索引不能被删除
-
使用DROP INDEX删除索引
DROP INDEX index_name ON table_name;
posted on 2020-05-16 00:38 chenxiaoyuan 阅读(486) 评论(0) 编辑 收藏 举报