MySQL中索引总结

 

3.前导模糊查询不能利用索引(like '%XX'或者like '%XX%'

5.MySQL主要提供2种方式的索引:B-Tree索引,Hash

 

索引的类型:

普通索引:这是最基本的索引类型,没唯一性之类的限制。

唯一性索引:和普通索引基本相同,但所有的索引列只能出现一次,保持唯一性。

主键:主键是一种唯一索引,但必须指定为"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不会使用索引。

5.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

6.对于多列索引,不是使用的第一部分,则不会使用索引

7.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

8.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

组合索引

组合索引的最左优先原则,组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到。

如果有一个组合索引(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";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值