MySQL索引

MySQL 索引

1、概念:创建在数据表上,对表的一列或多列进行排序,用于提高查询速度。

 

2、每个表至少支持16条索引,不同引擎所支持的索引上限不同。

 

3、优点:

a) 只查询索引列。

b) 查询时O(1) (hash)O(logB(n)) (b-tree)复杂度。

 

4、缺点:创建、维护索引耗费时间。

 

5、索引分类

a) 普通索引:无任何显示条件。

b) 唯一性索引:索引的元素(值、value)必须是唯一的,不可出现重复。

c) 全文索引:只能创建在charvarchartext类型上,MyISAM引擎支持。

d) 单列索引:在单个字段(属性)上创建索引。

e) 多列索引:在多个字段(属性)上创建索引。

f) 空间索引:只能创建在geometrylinestringpolygon类型上,MyISAM引擎支持。

 

6、索引的设计原则

a) 使用唯一性索引,O(1)的查询复杂度。

b) 为经常需要排序、分组、联合的字段建立索引。

c) 严格限制索引数量,只建立必要的索引,删除无用的索引。

d) 使用数据量少的索引(字段的长度越小越好)。

e) 如果字段长度很大,使用前缀索引。

 

7、创建表时,直接创建索引。

CREATE TABLE 表名 (属性名 数据类型 [完整性约束],

  属性名 数据类型 [完整性约束],

  ... ...

  属性名 数据类型 [完整性约束],

  [UNIQUE | FULLTEXT | SPATIAL]
      INDEX | KEY

  [索引名]

  (属性名1[(长度)] [ASC | DESC])

  );

UNIQUE:唯一性索引

FULLTEXT:全文索引

SPATIAL:空间索引

INDEX | KEY:指定字段为索引字段,INDEXKEY作用相同

索引别名:字面上的意思

(属性名1[(长度)] [ASC | DESC]):指定要索引的列,ASC为正序,DESC为倒序

 

8、 在已有的表上创建索引

a) 方法1

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名

ON 表名(属性名 [(长度)] [ASC | DESC]);

b) 方法2

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX

索引名(属性名 [(长度)] [ASC | DESC]);

 

9、删除索引

DEOP INDEX 索引名 ON 表名;

posted @ 2017-04-05 15:15  宁静淡泊  阅读(140)  评论(0编辑  收藏  举报