索引

索引的引入

  索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度;
  类似于图书的目录,方便快速定位,寻找指定的内容;

索引的优缺点

  优点:提高查询数据的速度;
  缺点:创建和维护索引的时间增加了;

MySQL常用的索引

普通索引INDEX:加速查找

唯一索引:
    -主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
    -唯一索引UNIQUE:加速查找+约束(不能重复)

联合索引:
    -PRIMARY KEY(id,name):联合主键索引
    -UNIQUE(id,name):联合唯一索引
    -INDEX(id,name):联合普通索引
#我们可以在创建上述索引的时候,为其指定索引类型,分两类
hash类型的索引:查询单条快,范围查询慢
btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)

#不同的存储引擎支持的索引类型也不一样
InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;
NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;
Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;

创建索引

  创建表的时候创建索引:

  CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件],
  属性名 数据类型 [完整性约束条件],
  ....
  属性名 数据类型
  [UNIQUE | FULLTEXT | SPATIAL ] INDEX| KEY
  [别名] (属性名 1 [(长度)] [ASC | DESC])
  );

创建普通索引

CREATE TABLE t_user1(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     INDEX (userName)
                 );


创建唯一性索引

CREATE TABLE t_user2(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     UNIQUE INDEX index_userName(userName)
                 );


创建全文索引

创建单列索引

创建多列索引

CREATE TABLE t_user3(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     INDEX index_userName_password(userName,PASSWORD)
                 );


 创建空间索引

在已经存在的表上创建索引

  CREATE [ UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
  ON 表名 (属性名 [(长度)] [ ASC | DESC]);

CREATE     INDEX index_userName ON t_user4(userName);
CREATE     UNIQUE INDEX index_userName ON t_user4(userName);
CREATE  INDEX index_userName_password ON t_user4(userName,PASSWORD);

用ALTER TABLE语句来创建索引

  ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX
  索引名 (属性名 [(长度)] [ ASC | DESC]);

ALTER TABLE t_user5 ADD INDEX index_userName(userName);
ALTER TABLE t_user5 ADD UNIQUE INDEX index_userName(userName);
ALTER TABLE t_user5 ADD INDEX index_userName_password(userName,PASSWORD);

删除索引
  DROP INDEX 索引名 ON 表名 ;

DROP INDEX index_userName ON t_user5;
DROP INDEX index_userName_password ON t_user5;
原文地址:https://www.cnblogs.com/linbin7/p/11930737.html