黑马程序员技术交流社区

标题: 【西安校区】MySQL优化之SQL语句优化 [打印本页]

作者: 就业高冷派    时间: 2018-3-29 15:50
标题: 【西安校区】MySQL优化之SQL语句优化
本帖最后由 逆风TO 于 2018-3-30 09:16 编辑

语句优化原则
不查,少查,快查
in 查询优化
案例设计
总结
使用in子查询,子查询的结果如果是一个索引列,不存在优化,如果不是索引列需要优化,如果能用联和查询的最好使用联和查询
count优化技巧
案例设计(需要特别注意5.7.2不能实现该优化必须在5.7.2以下的版本)
具体的原因可以参考http://www.ywnds.com/?p=10369
group by优化
group by 的实质是先排序后分组,也就是分组之前必排序
explain select * from demo group by name \G
************* 1. row **************
           id: 1
  select_type: SIMPLE
        table: demo
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 8962639
     filtered: 100.00
        Extra: Using temporary; Using filesort
1 row in set, 1 warning (0.00 sec)


我们看到Using filesort,说明MySQL帮助我们做了排序
优化思路有2中
limit分页查询优化
分页查询一般的实现方式使用limit来做
select id,name,url,address from demo limit 0,10;
0表示起始页数,10表示每页显示的记录数
我们做如下测试起始页分别是下面的数据
0,10,100,1000,10000,100000,1000000
select id,name,url,address from demo limit 0,10;
select id,name,url,address from demo limit 10,10;
select id,name,url,address from demo limit 100,10;
select id,name,url,address from demo limit 1000,10;
select id,name,url,address from demo limit 10000,10;
select id,name,url,address from demo limit 100000,10;
select id,name,url,address from demo limit 1000000,10;
我们观察耗费的时间在逐渐的增加
出现这种情况的原因是因为,limit是逐行扫描例如现在起始行是10000,需要查询出前10000行,然后从10000行之后在取10条记录出来,这样分页数越大查询越慢
总结
优化不是绝对的,需要根据自己的业务逻辑,项目配置具体情况具体分析


作者: 逆风TO    时间: 2018-3-30 09:16
谢谢老师分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2