用于计数的mysql语句,MySQL语句优化补充(二)

除了增加索引外,还有很多注意的问题。

1、不要在语句中出现计算

520453f8441ca1246c8ebeff67748582.png

2、查询条件数据类型一致

为了测试把其中的一个订单id 改为 201903121704170005,看下图不同的查询:

57910ae7a9047a6b10b92a1f5af3ddc8.png

显然oid=201903121704170005比 oid=’201903121704170005’长很多,因为原来的oid 的字段类型是varchar,而不是数值型。分析一下:

ebb7f645a388e7aa82e74582298cf2fb.png

类型不一致的第一条,没有走索引。

3、不要使用like左模糊查询

85727c3527849aa6c7e98a345cf77742.png

左模糊不走索引。

1429b11665fb9fe51510f1179f269699.png

右模糊不影响索引的使用

1ca29a85ac030fb916d48f5469dc83b1.png

4、select 避免使用*查询所需字段

45d5ca0037a5ad39fc1c5f8d3150151b.png

需要什么字段就查什么字段,避免使用*。

5、查询一条语句时加上limit 1

show profiles;

e87f59c734a6bdfd0a74a1f70d0a5909.png

但是,并不是所有的查询加上limit 1,都能提高速度,我们再试一次:

3e6c4023c5f37133190ab6369af0b875.png

显然,前者加上limit 1 的查询时间反而比后者没加limit 1 花费更长的时间,即使差距只有0.00006s。那么在什么时候需要一条数据加上limit 1 的时候才能达到优化的效果呢?

请看下面的例子:

3ade55b1d780768ada27ed782504c26d.png

68ced4d238db667b14f8364551d82e50.png

44a505dce1096d777182c5efa72d8781.png

通过简单的测试,当所选的记录id越靠前,使用limit 1 时,效果越明显。原因是,price 字段在没有加索引的情况下,需要进行全表扫描,加上limit 1,只要找到了对应的一条记录,就不会继续向下扫描了,效率会大大提高。 limit 1适用于查询结果为1条(也可能为0)会导致全表扫描的的SQL语句。

再看一下使用主键作为条件时,使用limit 1

907c40213043985ee5f137f5f4fa93ab.png

从结果看来,效果不是特别明显,而时候反而加上limit 1,效率反而降低。原因是 sql 语句执行顺序为 select 查询完结果之后再进行 limit 1筛选。

所以,建议使用limit 1 最好是用在没加索引的where条件下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值