索引的类型:
普通索引:这是最基本的索引类型,没唯一性之类的限制。
唯一性索引:和普通索引基本相同,但所有的索引列只能出现一次,保持唯一性。
主键:主键是一种唯一索引,但必须指定为"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";
原文:https://www.cnblogs.com/shangping/p/12158790.html