4-创建索引和约束
索引
概述
索引是一种与数据表相关的类似于目录的一种数据结构,MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
索引也类似一张表,该表保存了主键与索引字段,并指向实体表的记录。
索引也可以分为单列索引和组合索引,单列索引表示一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引表示一个索引包含多个列。
索引的优点
提高查询速度。
提高表与表之间连接的效率。
唯一性索引还可以保证数据记录的唯一性。
索引的缺点
虽然索引大大提高了查询速度,但却会降低更新表的速度,因为在对数据表进行INSERT、UPDATE、DELETE的操作时,MySQL不仅要保存数据,还要保存一下索引文件。因此,索引并不是创建的越多越好。
引用索引的原则
科学地设计索引,在提高查询效率的同时,应尽量减少索引带来的副作用。
考虑设置索引的情况如下:
- 经常检索的列(在WHERE子句中使用的列)。
- 主键列、外键列(事实上,主键约束列、唯一性约束列会自动创建索引)。
- 经常用于表间连接的列。
考虑不设置索引的情况如下:
- 检索中几乎不涉及到的列。
- 重复值太多的列。
- 数据类型为text、blob的列。
- 行数极少的表没必要创建索引。
- 插入、更新效率比查询效率更重要的情况。
创建表的同时创建索引
- 可以使用CREATE TABLE语句在创建数据表的同时创建索引,其语法格式如下:
CREATE TABLE <表名> (
<字段名1>[, ……n] | 索引项
)
其中索引项的语法格式为:
PRIMARY KEY [<索引名>](<字段名1> [ASC|DESC] [, ……n]) |
UNIQUE [INDEX] [<索引名>](<字段名1> [ASC|DESC] [, ……n]) |
INDEX | KEY [<索引名>](<字段名1> [ASC|DESC] [, ……n]) |
FULLTEXT [INDEX] [<索引名>](<字段名1> [ASC|DESC] [, ……n])说明:
PRIMARY KEY:主键索引。
UNIQUE:唯一性索引。
INDEX | KEY:普通索引,KEY通常是INDEX的同义词,二选一即可。
FULLTEXT:全文索引。
- 示例
在ALTER TABLE语句中创建索引
- 如果数据表已经存在,可以使用ALTER TABLE语句创建索引,其语法格式如下:
ALTER TABLE <表名>
ADD 索引项
说明:语法中除了多一个ADD关键词,其他与在CREATE TABLE语句中创建索引类似。
- 示例:
使用CREATE INDEX语句创建索引
- 创建索引的语句使用CREATE INDEX,其语法格式如下:
CREATE [UNIQUE] | [FULLTEXT] INDEX <索引名>
ON <表名> (<字段名1> [ASC|DESC] [, ……n])
说明:若无UNIQUE、FULLTEXT关键词则是创建普通索引。
- 示例:
使用SHOW INDEX语句查看索引
- 查看索引使用语句SHOW INDEX,其语法格式如下:
SHOW INDEX FROM <表名> [FROM &