Mysql的索引

先介绍sql中用的索引常用操作。 ###创建索引:

	CREATE INDEX 索引名 ON 表名(列名);
	CREATE UNIQUE INDEX 索引名 on 表名(列名);
	
	example:
		CREATE INDEX date_index on statdata (`date`);

	alter table 表名 add unique index 索引名(列名);
	
	example:
		ALTER TABLE statdata ADD INDEX key_index (`key`);

###删除索引:

	drop index 索引名 on 表名;

	example:
		DROP 	INDEX date_index ON statdata;

	alter table 表名 drop index 索引名;

###查看索引

	show index from 表名

	example:
	show index from statdata;	

###索引中的主键 主键就是唯一索引的一种,主键要求建表时指定,一般用auto_increment列,关键字是primary key 主键创建:

creat table test2 (id int not null primary key auto_increment);

全文索引

InnoDB不支持,MyISAM支持性能比较好,一般在 CHAR、VARCHAR 或 TEXT 列上创建。

	CREATE TABLE 表名( 
		id int not null primary key anto_increment,
		title varchar(100),FULLTEXT(title)
	)type=MyISAM;

单列索引与多列索引

索引可以是单列索引也可以是多列索引(也叫复合索引)。按照上面形式创建出来的索引是单列索引,现在先看看创建多列索引: CREATE TABLE test3 ( id int not null primary key auto_increment, uname char(8) not null default ‘’, password char(12) not null, INDEX(uname,password) ) type=MyISAM;

注意:INDEX(a, b, c)可以当做a或(a, b)的索引来使用,但不能当作b、c或(b,c)的索引来使用。这是一个最左前缀的 优化方法。

##聚簇索引(Clustered Index)与非聚簇索引(Non-clustered Index) 最通俗的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的索引顺序与数据物理排列顺序无关。举例来说,你翻到新华字典的汉字“爬”那一页就是P开头的部分,这就是物理存储顺序(聚簇索引);而不用你到目录,找到汉字“爬”所在的页码,然后根据页码找到这个字(非聚簇索引)。

InnobDB的主键索引就是聚簇索引。索引树的叶子节点保存了数据。 MyISAM的索引和数据是分开的。索引树的叶子节点保存了数据的地址。

打开查询分析器IO统计和时间统计

SET STATISTICS IO ON;
SET STATISTICS TIME ON;		

Mysql的索引根据存储引擎的不同,使用的是不同的索引方式,但是基本相似。

##InnnoDB存储引擎 索引方式使用聚簇索引 ##Myisa存储引擎 索引方式使用非聚簇索引 ##索引的实际操作

索引中的唯一索引:

索引和普通字段,都可以设置一个唯一的属性,如果一个索引被设置唯一(unique)的,那么它 索引的字段只能有这一个索引。 这意味着:一个字段可以拥有多个索引(每个索引都不是唯一索引)。

Published: February 10 2015

blog comments powered by Disqus