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)的,那么它 索引的字段只能有这一个索引。 这意味着:一个字段可以拥有多个索引(每个索引都不是唯一索引)。