索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构,可以提高查询速度。使用索引类似于使用新华字典的音序表,通过提取拼音,可以快速定位该数据的位置
索引有其明显的优势,也有不可避免的缺点:
所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制),可以创建在任何数据类型的字段上
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]]) );
在已存在的表上通过 CREATE 语句创建索引
CREATE INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
通过 ALTER TABLE 语句创建
ALTER table tablename ADD INDEX|KEY indexName(propname [(length) [ASC|DESC]])
所谓唯一索引,就是在创建索引时,限制索引的值必须唯一,主键就是一种特殊的唯一索引
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... UNIQUE INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]]) );
在已存在的表上通过 CREATE 语句创建索引
CREATE UNIQUE INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
通过 ALTER TABLE 语句创建
ALTER table tablename ADD UNIQUE INDEX|KEY indexName(propname [(length) [ASC|DESC]])
全文索引主要关联在 CHAR、VARCHAR 和 TEXT 字段上,以便能更加快速地查询数据量较大的字符串类型字段
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... FULLTEXT INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]]) );
在已存在的表上通过 CREATE 语句创建索引
CREATE FULLTEXT INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
通过 ALTER TABLE 语句创建
ALTER table tablename ADD FULLTEXT INDEX|KEY indexName(propname [(length) [ASC|DESC]])
所谓多列索引,是指在创建索引时关联多个字段。虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]], propname2 [(length) [ASC|DESC]], ......); );
在已存在的表上通过 CREATE 语句创建索引
CREATE INDEX indexName ON tablename (propname1 [(length) [ASC|DESC]], propname2 [(length) [ASC|DESC]], ......);
通过 ALTER TABLE 语句创建
ALTER table tablename ADD INDEX|KEY indexName(propname1 [(length) [ASC|DESC]], propname2 [(length) [ASC|DESC]], ......);
DROP INDEX indexName ON tablename;