MySQL数据库——索引

索引在Mysql中是存储引擎用于快速找到记录的一种数据结构(BTree,平衡树),索引对于数据库的良好性能是非常关键的,尤其是当表中的数据量越来越大的时候,索引对于性能的影响愈发重要。

索引相当于字典的目录,如果查找某个字的时候可以通过目录,提高查询速度,否则需要翻阅字典的每一页。

使用索引的目的:提高查询速度。

索引特点:创建和维护索引会消耗很多时间与磁盘空间,但是查询速度大大提高。
(创建字典目录需要时间,字典目录需要占字典大小)

索引语法

语法1:创建表时,添加索引。
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
…,
Index | key [索引名称] (字段名)
);

语法2:创建完表后,添加索引。
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
…,
);

Alter table 表名 add {unique | primay key| index...索引类型} 索引名(字段名) 

索引分类

在说索引之前应该先建立一个表t2:

create table t2( id int, name varchar(20),phone varchar(20));

1. 普通索引

普通索引, 就是一个普通的索引,可以为空,可以重复。

语法:

ALTER TABLE  表名  ADD INDEX 字段名_index(字段名); 

给表2 添加普通索引

ALTER TABLE  t2 ADD INDEX phone_index(phone); 

2. 唯一索引

唯一索引,可以为空,不可以重复。

ALTER TABLE  表名 ADD UNIQUE(字段名); # 添加唯一索引 
ALTER TABLE 表名 ADD 字段名 type UNIQUE; # 添加列并且添加索引。

将字段名 phone 设置成唯一索引。

alter table t2 add UNIQUE phone_index(phone);

查看创建表的细节:

show create table t2;

打印出来就是这样:

CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  UNIQUE KEY `phone_index` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

3. 主键索引

主键索引 ,不可以为空,不可以重复,只要是主键,就是索引

语法

alter table 表名 add PRIMARY key(字段名);

给表t2的id设置主键索引

alter table t2 add PRIMARY key(id);

查看设置结果

show create table t2 
CREATE TABLE `t2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `phone_index` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

4. 多列索引
语法:

ALTER TABLE 表名  ADD INDEX(字段1,字段2,字段3); 

删除索引

删除索引的语法是:

Drop index 索引名 on 表名;

例如删除表t2的索引:

drop index phone_index on t2;

使用索引应该注意什么?

  1. 少量数据不使用数据
  2. 查询次数少不使用索引
  3. 查询要携带索引字段,通常放在select之后第一个
  4. 索引提高了查询的效率,占有跟多的资源。

注意:
1、索引不是越多越好。(一本书,半本书是目录不可以)。

你可能感兴趣的:(MySQL数据库,索引,数据库,mysql)