Mysql-索引

一.explain执行计划

EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括SELECT语句执行过程中表如何连接和连接的顺序。

语法:

EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件;

二.索引使用

(1)验证索引效率

在未建立索引之前,执行如下SQL语句,查看SQL的耗时

SELECT* FROM tb_sku WHERE sn='100000003145001';

(2)   针对字段创建索引

create index idx_sku_sn on tb_sku(sn);

三.最左前缀法则

如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列,并且不跳过索引中的列。

如果跳跃某一列,索引将部分失效(后面的字段索引失效)

四.范围查询

联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效

esplain select * from tb_user where profession='软件工程' and age>30 and status='0';    
esplain select * from tb_user where profession='软件工程' and age> =30 and status='0';    

五.索引列运算

不要在索引列上进行运算操作,索引将失效

explain select * from tb_user where substring(phone,10,2)='15'

六.字符串不加引号

字符串类型字段使用时,不加引号,索引将失效。

七.模糊查询

如果仅仅是尾部模糊查询,索引不会失效。如果是头部模糊匹配,索引失效。

explain select * from tb_user where profession like'软件%';
explain select * from tb_user where profession like'%工程';
explain select * from tb_user where profession like'%工%';

八.or连接的条件

用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到

explain  select * from tb_user where id=10 or age=23;
explain select * from tb_user where phone='17799990017' or   age=23;

由于age没有索引,所以即使id,phone有索引,索引也会失效,所以需要针对于age也要建立索引。

九.数据分布影响

如果MySQL评估使用索引比全表更慢,则不使用索引

select * from tb_user where phone >='17799990005';
select * from tb_user where phone >='1799990015';

十.SQL提示

SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的

use index:

告诉数据库用哪个索引

ignore index:

告诉数据不用那个索引

force index:

告诉数据库必须用那个索引

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值