数据库MySQL-索引
- 2020 年 3 月 27 日
- 筆記
1.6 索引
1.6.1 概述
优点
加快查询速度
缺点:
带索引的表在数据库中需要更多的存储空间 增、删、改命令需要更长的处理时间,因为它们需要对索引进行更新
1.6.2 创建索引的指导原则
适合创建索引的列
1、该列用于频繁搜索 2、该列用于对数据进行排序 3、在WHERE子句中出现的列,在join子句中出现的列。
请不要使用下面的列创建索引:
1、列中仅包含几个不同的值。 2、表中仅包含几行。为小型表创建索引可能不太划算,因为MySQL在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长
1.6.3 创建索引
1、主键索引:主要创建了主键就会自动的创建主键索引
2、唯一索引:创建唯一键就创建了唯一索引
-- 创建表的时候添加唯一索引 create table t5( id int primary key, name varchar(20), unique ix_name(name) -- 添加唯一索引 ); -- 给表添加唯一索引 mysql> create table t5( -> name varchar(20), -> addr varchar(50) -> ); Query OK, 0 rows affected (0.00 sec) mysql> create unique index ix_name on t5(name); Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 -- 通过更改表的方式创建唯一索引 mysql> alter table t5 add unique ix_addr (addr); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
普通索引
-- 创建表的时候添加普通索引 mysql> create table t6( -> id int primary key, -> name varchar(20), -> index ix_name(name) -> ); Query OK, 0 rows affected (0.02 sec) -- 给表添加普通索引 mysql> create table t7( -> name varchar(20), -> addr varchar(50) -> ); Query OK, 0 rows affected (0.00 sec) mysql> create index ix_name on t7(name) ; Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0 -- 通过更改表的方式创建索引 mysql> alter table t7 add index ix_addr(addr); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
小结:
1、创建主键就会创建主键索引
2、创建唯一键就会创建唯一索引
3、创建唯一键的语法
--语法一 create unique [index] 索引名 on 表名(字段名) -- 方法二 alter table 表名 add uniqe [index] 索引名(字段名)
4、创建普通索引
-- 语法一 create index 索引名 on 表名(字段名) -- 语法二 alter table 表名 add index 索引名(字段名)
5、索引创建后,数据库根据查询语句自动选择索引
1.6.4 删除索引
语法:drop index 索引名 on 表名
mysql> drop index ix_name on t7; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0