mysl 常见索引
MySQL中常见的索引
◆普通索引
◆唯一索引
◆主键索引
◆组合索引
◆全文索引
◆外键 (只有innodb存储引擎才支持)
普通索引:
这是最基本的索引,它没有任何限制。有以下几种创建方式:
有以下几种创建方式:
◆创建索引
CREATE INDEX indexName ON tablename(username(length)); |
◆修改表结构
ALTER tablename ADD INDEX indexName (username(length)) |
Tip:length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length ,下同
◆创建表的时候直接指定
CREATE TABLE mytableuuu( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX indexName (username(length)) ); CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL); create index index1 on mytable(id); //创建普通索引 |
◆删掉索引:
drop index index1 on mytable; |
如:
有一个概念,
行定义:在声明字段(列)的时候定义的,比如primary key
表定义:在所有字段(列)声明完之后定义的,比如primary key,index
CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL,index index1(username));
唯一索引(unique)
索引列的值必须唯一,但允许有空值。
1)创建索引:Create UNIQUE INDEX indexName ON tableName(tableColumns(length))
2)修改表结构:Alter tableName ADD UNIQUE [indexName] ON (tableColumns(length)
3)创建表的时候直接指定:Create TABLE tableName ( [...], UNIQUE [indexName](tableColumns(length));
主键索引(primary key)
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
当然也可以用 ALTER 命令。
Tip:记住:一个表只能有一个主键。主键索引就是我们所说的主键。在一个表中,主键只能有一个,但是普通索引和唯一索引可以有多个。
组合索引
多列索引,由多个列共同来组成一个索引。
增加组合索引
alter table mytable add index name_city_age(username,city,age);
对于组合索引,必须以最左索引为前缀,依次排列的,才可以使用到组合索引,中间不能有间隔。
下面的可以使用到组合索引:
◆ username,city,age
◆ usernname,city
◆ usernname
下面的不可以使用到组合索引:
◆ city,age
◆ city
◆ age
注意组合索引,如果在某个表中,有多个索引,我们可以考虑一下,使用组合索引来优化。
创建索引注意事项:
1,alter table 用来创建普通索引、unique索引或primary key索引。
alter table table_name add INDEX index_name(column_list);
alter table table_name add UNIQUE(column_list);
alter table table_name add PRIMARY KEY(column_list);
tip: 1,column_list指对哪些进行索引,多列时和列之间用逗号进行分隔。
` 2,索引名index_name 可选,缺省时,mysql会根据第一个索引列赋一个名称。
3,另,alter table允许在单个语句中更改多个表,因此可同时创建多个索引。
2,create index 可对表增加普通索引或unique索引,不能创建主键索引。
create index index_name on table_name(column_list);
create unique index index_name on table_name(column_list);
tip:在这里,索引名不可选。
3,创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为Primary key或unique索引
alter table table_name add primary key(column);
show index from table_name;#查询某表所有的索引
参考:http://www.php100.com/html/webkaifa/database/Mysql/2013/0316/12223.html