索引是加快对数据表内容的访问速度的基本手段,在有很多个表进行联接查询时,这种手段所带来的效果更加的明显,这里介绍索引的特性以及创建和删除索引的语法。
mysql提供了多种灵活的索引创建办法,如下所示:
- 可以为单个数据列编制索引,也可以为多个数据列构造复合索引。
- 索引可以只包含独一无二的值,也可以包含重复的值。
- 可以为同一个数据表创建多个索引,并且 用于不同的数据列查询。
- 可以为数据列创建一个前缀索引。
一,索引依赖于存储引擎
这是很显然的,索引本身也是一个文件,也以一定的格式存储。索引具有很多的特性,但不是所有的存储引擎都对所有的特性进行支持。
二,创建索引
MYSQL可以创建以下索引
- 唯一索引。这种索引不允许索引项本身出现重复的值,对涉及多个数据列的索引(复合索引)来说,这意味着那几个数据列的值的组合在整个数据表的范围内不能重复出现。语句如下
ALTER TABLE tbl_name ADD PRIMARY KEY (index_columns);
因为任何数据表只有一个PRIMARY KEY
ALTER TABLE tbl_name ADD UNIQUE index_name(index_columns);
CREATE UNIQUE INDEX index_name ON tbl_name (index_columns) ;
每个数据表只能有一个PRIMARY KEY,并且该索引不能包含NULL值,但UNIQUE可以包含,并且可以包含多个NULL值,这是因为MYSQL无法判断两个NULL值是否代表同样的东西,索引里的多个NULL值被认为代表多个不同的东西。 - 普通(非唯一索引)。这种索引的优点是允许索引值重复。
ALTER TABLE tbl_name ADD INDEX index_name (index_columns);
CREATE INDEX index_name ON tbl_name(index_columns); - FULLTEXT索引。用来进行全文检索,这种索引只适用于MYISAM数据表。
ALTER TABLE tbl_name ADDFULLTEXTindex_name (index_columns);
CREATEFULLTEXTINDEX index_name ON tbl_name (index_columns); - SPATIAL索引。这种索引只适用于MYISAM数据表和空间(spatial)数据类型。
ALTER TABLE tbl_name ADD SPATIAL index_name (index_columns);
CREATE SPATIAL INDEX index_name ON tbl_name (index_columns); - HASH索引。这是MEMORY数据表的默认索引类型,但可以改用BTREE索引来代替这个默认索引。
INDEX USING BTREE (id);
三、删除索引
删除索引的操作可以用DROP INDEX 或 ALTER TABLE语句来完成。如
DROP INDEX index_name ON tbl_name ;
如果想要删除一个PRIMARY KEY 索引,必须使用引号标识形式给出索引,
DROP INDEX `PRIMARY` ON tbl_name;
ALTER TABLE tbl_name DROP INDEX index_name
ALTER TABLE tbl_name DROP PRIMARY KEY;