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

  • 相关阅读:
    constraint更新表列约束默认值
    sql语句 关于日期时间、类型转换的东西
    SQL数据库完全复制
    SQLServer语句 汇总
    SQL Server Profiler使用方法
    SQL语句-批量插入表(表数据插表)
    VS 快捷键
    外部引用 jQuery 库
    mongodb笔记
    Ubuntu16.04安装live-server
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/10536766.html
Copyright © 2011-2022 走看看