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 就证明有派生表查询

  • 相关阅读:
    面向对象编程(一)
    函数嵌套(闭包)、阶乘、斐波那数列知识
    函数的定义及用法
    常见例子
    Python解析JSON详解
    linux yum install mvn
    消息组件
    websphere 安装中出现JNDI资源找不到问题总结
    多业务Nginx解决方式
    python-pip 安装使用问题
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/10536766.html
Copyright © 2011-2022 走看看