zoukankan      html  css  js  c++  java
  • mysql 查询优化 ~ 多表查询改写思路

    一 简介:在之前我们从基础可知,现在咱们聊一下改写的几种思路
    二 分类:
      1 left join
      2 inner join
      3 right join
    三 具体改写思路:
    思路1 本身不包含子查询,将多表查询的条件拆分成多个select子查询然后再进行关联
    思路2 本身涉及到分组,增加order by null,去掉文件排序,减少消耗
    思路3 本身驱动表选择不正确,增加STRAIGHT_JOIN进行强制指定驱动表

    思路4 将where条件的关联条件查询改写成join标准语法

    思路5  从内到外分步进行处理

    思路6  对于因为order by导致的索引错选 可以进行将order by改写成外层select查询

    四 分析思路

     1 联合索引在多表查询下可能会失效

    如果不确定是索引设置问题还是sql本身需要改写,就把关于表的sql条件查询拆出来,然后进行explain观察,联合索引是否全部走,是的话就不是索引问题. 可能会有这种情况,联合索引在多表join和单表查询的表现形式是不一样的(切记切记)

    2 对于多表select操作

       1 按照语句对select内嵌进行拆分,然后explain由内到外进行分别分析,逐个击破

       2 多多注意观察explain,能发现很多线路

            1 出现using filesort using temporay 就证明排序没有选择驱动表列,而且驱动表列应该没有索引

            2 出现 devied 就证明有派生表查询

  • 相关阅读:
    2014年7月 记事
    从客户端中检测到有潜在危险的Request.Form值 的解决方法
    jquery parent() parents() closest()区别
    不包含适合于入口点的静态"Main"方法
    JQuery移除事件
    jQ的toggle()方法示例
    codeforces hello2018 D Too Easy Problems
    HDU-6084 寻找母串
    51Nod 1109 01组成N的倍数
    可重排列
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/10536766.html
Copyright © 2011-2022 走看看