索引的类型:
普通索引:这是最基本的索引类型,没唯一性之类的限制。
唯一性索引:和普通索引基本相同,但所有的索引列只能出现一次,保持唯一性。
主键:主键是一种唯一索引,但必须指定为 "PRIMARY KEY" 。
全文索引:全文索引的索引类型为 FULLTEXT 。全文索引可以在 VARCHAR 或者 TEXT 类型的列上创建。
索引的操作
使用 ALTER TABLE 语句创建索引。
alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;
使用 CREATE INDEX 语句对表增加索引。
create index index_name on table_name (column_list) ;
create unique index index_name on table_name (column_list) ;
删除索引
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
查看索引
show index from table_name;
如何使用索引
1 、在经常进行连接的字段,建立索引
2 、在排序或分组的列上建立索引
3 、在条件表达式中建立所因( where ),情况有两种
不同值较多的列上使用索引,
不同值较少的列上不适用索引
4 、待排序的列有多个,可以在这些列上建立复合索引
5 、可以建立短索引,例如:
alter table table_name add index index_name(column_list(length))
alter table test add index ab(`a`(3));
6 、 join 中出现的列需要建立索引
注意事项 :
1 、索引不会包含有 null 值的列
2 、 MySQL 查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的。因此数据
库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多列的排序,如果需要最好给这些列创建复合索引。
3 、不要在列上进行运算
4 、以通配符 % 和 _ 开头作查询时, mysql 不会使用索引。例如:
会使用索引 :SELECT * FROM mytable WHERE username like 'admin%'
不会使用索引 :SELECT * FROM mytable WHERE username like '%admin'
组合索引
组合索引的最左优先原则,组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到。
如果有一个组合索引 (col_a,col_b,col_c)
下面的情况都会用到这个索引:
col_a = "some value";
col_a = "some value" and col_b = "some value";
col_a = "some value" and col_b = "some value" and col_c = "some value";
col_b = "some value" and col_a = "some value" and col_c = "some value";
对于最后一条语句, mysql 会自动优化成第三条的样子 ~~ 。
下面的情况就不会用到索引:
col_b = "aaaaaa";
col_b = "aaaa" and col_c = "cccccc";