MySQL索引的概念
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。简言之,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。SQL语句在没有索引的情况下,数据库会遍历全部数据后选择符合条件的;而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。
哈希索引(Hash Index)建立在哈希表的基础上,它只对使用了索引中的每一列的精确查找有用。对于每一行,存储引擎计算出了被索引的哈希码(Hash Code),它是一个较小的值,并且有可能和其他行的哈希码不同。
它把哈希码保存在索引中,并且保存了一个指向哈希表中的每一行的指针。 在mysql中,只有memory存储引擎支持显式的哈希索引。如果多个值有相同的哈希码,索引就会把行指针以链表的方式保存在哈希表的同一条记录中。
索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。
l MySQL索引的类型
1. 普通索引:这是最基本的索引,它没有任何限制,,MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引。
–直接创建索引
CREATE INDEX index_name ONtable(column(length))
–修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEXindex_name ON (column(length))
–创建表的时候同时创建索引
CREATE TABLE index1 (id INT ,
name VARCHAR(20) ,
sex BOOLEAN ,
INDEX ( id)
)
2. 唯一索引
与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。
–创建唯一索引
CREATE UNIQUE INDEX indexName ONtable(column(length))
–修改表结构
ALTER TABLE table_name ADD UNIQUE indexNameON (column(length))
–创建表的时候直接指定
CREATE TABLE index2 (id INT UNIQUE ,
name VARCHAR(20) ,
UNIQUE INDEX index2_id ( id ASC)
)
3. 全文索引(FULLTEXT)
MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。
–创建表的时候添加全文索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATEutf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
);
–修改表结构添加全文索引
ALTER TABLE article ADD FULLTEXTindex_content(content)
–直接创建索引
CREATE FULLTEXT INDEX index_content ONarticle(content)
其他分类: 单列索引、多列索引
多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。
ALTER TABLE article ADD INDEX index_titme_time(title(50),time(10))
http://blog.csdn.net/xluren/article/details/32746183
http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html