美文网首页
2018-06-30-查询性能优化点总结

2018-06-30-查询性能优化点总结

作者: KillerManA | 来源:发表于2018-06-30 16:24 被阅读11次

    1.善于使用expain

    explain的使用清晰度展示了一些需要添加索引以及其它的一些性能信息,可以根据查看explain的结果对语句进行优化

    2.切分查询

    感觉计算机里面分而治之的思想无处不在,这里切分查询既是这个思想的一次展示,如果我们想删除一年的数据,如果一次性删除的话对数据库,会占用大量资源,可能造成阻塞,对正常的服务器运行产生波动影响,
    策略:将一次性删除改为每次删除1-3万行数据(这里可根据自己的服务器性能进行变动,使用工具找到影响最小的),在每次删除后最好暂停一下,这样能将整个数据操作分散到更长的时间线中,对服务影响更小

    3.特定类型优化查询

    (1).count()简单优化

    常见误解:count函数在MyISAM中非常快
    答:只有在没有where条件的情况下才能非常快

    select count(*) from world.city where id > 5;
    

    通过explain可以看出这个sql语句在我的数据库中扫描了5000行左右代码,那么如何进行优化,可以倒过来查询啊

    select (select count(*) from world.city) - count(*)  from world.city where id < 5
    

    这样从小的开始排查大大减少了查询行数,是个不错的查询方式。

    (2) group by优化

    最好优化策略:
    ◆ GROUP BY 条件字段必须在同一个索引中最前面的连续位置;
    ◆在使用GROUP BY 的同时,只能使用 MAX 和 MIN 这两个聚合函数;
    ◆如果引用到了该索引中 GROUP BY 条件之外的字段条件的时候,必须以常量形式存在

    (3) limit优化

    limit 在数据量不大的情况下非常适合分页,再加上索引,相当方便,
    但是在数据量便宜很大的情况下就不是很合适了,这里我们引入mysql的一种查询方法。
    延迟查询:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。
    再说白点就是先查主键,在关联到数据,来看例子:

    select film_id, description from sakila.film order by title limit 50000, 5;
    

    查询五万条之后的五条数据
    优化:

    select film.film_id, film.discription from sakila.film inner join (
        select film_id, description from sakila.film order by title limit 50000, 5
    ) as lim using(film_id);
    

    这里我们通过子查询先查询了符合条件的id,然后在关联到表中,查询效率提升好几倍

    -------------------------------------暂时到这里,后续对文章进行继续补充

    相关文章

      网友评论

          本文标题:2018-06-30-查询性能优化点总结

          本文链接:https://www.haomeiwen.com/subject/cvmtuftx.html