索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
索引的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT
、UPDATE
和DELETE
。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。
普通索引
创建索引
-- 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;
-- 如果是BLOB和TEXT类型,必须指定 length.
CREATE INDEX index_name ON tab_name (col_name);
通过ALTER添加索引
ALTER table tab_name ADD INDEX index_name (col_name)
创建表的指定索引
CREATE TABLE mytable(
id INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [index_name] (user_name(length))
);
删除索引
DROP INDEX [index_name] ON tab_name;
唯一索引
与普通索引类似,不同的是索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。有以下创建方式:
创建索引
CREATE UNIQUE INDEX index_name ON tab_name(col_name(length));
通过ALTER添加索引
ALTER table tab_name ADD UNIQUE [index_name] (col_name(length))
创建表的时候直接指定
CREATE TABLE mytable(
id INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [index_name] (username(length))
);
使用ALTER命令添加和删除索引
```sql — 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。 ALTER TABLE tab_name ADD PRIMARY KEY (column_list); — 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。 ALTER TABLE tab_name ADD UNIQUE index_name (column_list); — 添加普通索引,索引值可出现多次。 ALTER TABLE tab_name ADD INDEX index_name (column_list); — 该语句指定了索引为 FULLTEXT ,用于全文索引。 ALTER TABLE tab_name ADD FULLTEXT index_name (column_list);
— 使用 ALTER 命令添加和删除主键
— 主键作用于列上(可以一个列或多个列联合主键),添加主键索引时,需要确保该主键默认不为空(NOT NULL)
ALTER TABLE tab_name MODIFY col_name INT NOT NULL;
ALTER TABLE tab_name ADD PRIMARY KEY (col_name );
— 删除主键时只需指定PRIMARY KEY,但在删除索引时,必须知道索引名。
ALTER TABLE tab_name DROP PRIMARY KEY;
— 显示索引信息
SHOW INDEX FROM tab_name;
```