Mysql 索引类型

索引类型

1.普通索引
 create index index_name on t_user(name(12));
2.唯一索引:允许表中存在多条记录为空的记录
create unique index index_name on t_user(name(12));
3.主键索引:不允许有空值
create table t_user(id int not null,name varchar(12),primary key(id));
4.组合索引
alter table t_user add index name_city_age(name(6),city,age);

5.Hash索引

CREATE TABLE testhash (fname VARCHAR(50) NOT NULL,lname VARCHAR(50) NOT NULL,KEY USING HASH(fname))ENGINE=MEMORY;

6.B-Tree索引:
CREATE TABLE People (last_name varchar(50) not null,first_name varchar(50) not null,dob date not null,gender enum('m', 'f') not null,key(last_name, first_name, dob));


7.聚簇索引(Clustered Indexes):聚簇索引保证关键字的值相近的元组存储的物理位置也相同(所以字符串类型不宜建立聚簇索引,特别是随机字符串,会使得系统进行大量的移动操作),且一个表只能有一个聚簇索引。因为由存储引擎实现索引,所以,并不是所有的引擎都支持聚簇索引。目前,只有solidDB和InnoDB支持。

8.全文索引

ALTER  TABLE  index15  ADD  FULLTEXT  INDEX  index15_info ( info ) ;

 

用不上索引的情况
1.!= 和<>不等查询时,不会用索引
2.对字段使用函数时,不会用索引
3.join时条件字段类型不一致时无法使用索引
4. or 查询时,前后字段度必须有索引时才能用上索引

干预索引使用,提高性能:
1.提供给Mysql参考,推荐Mysql使用某个索引

select * from t_user use index(index_city)where name like 'a%' and city like 'b%';
2.强制Mysql使用某索引

select * from t_user force index(index_city)where name like 'a%' and city like 'b%';
3.让mysql 忽略使用某索引

select * from t_user ignore index(index_city)where name like 'a%' and city like 'b%';

posted on 2014-07-06 00:30  pushStack  阅读(899)  评论(0编辑  收藏  举报