MySQL索引

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值