zoukankan      html  css  js  c++  java
  • [MySQL系列] 使用STRAIGHT_JOIN 优化inner join查询排序索引问题

    项目里有条sql语句使用inner join 语句

    但是在增加了order by 左表.字段 desc 后效率非常慢

    查询explain 如下:

     左表字段last_follow_time是有索引的,排序时但是并没有走索引,出现了Using temporary; Using filesort

    这是因为排序时没有使用左表的字段索引,我们可以强制使用左表作为主表,就可以使用索引了

    STRAIGHT_JOIN 替换 inner join,就可以解决问题

    总的来说STRAIGHT_JOIN只适用于内连接,因为left join、right join已经知道了哪个表作为驱动表,哪个表作为被驱动表,比如left join就是以左表为驱动表,right join反之。

    而STRAIGHT_JOIN就是在内连接中使用,而强制使用左表来当驱动表,所以这个特性可以用于一些调优,强制改变mysql的优化器选择的执行计划。(也就是说STRAIGHT_JOIN实际上是INNER JOIN的强制指定左表作为驱动表,而不是让mysql优化器去判断和选择)

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com
  • 相关阅读:
    java中用spring实现数组类型输出
    #科委外文文献发现系统——导出word模板1.0
    #科委外文文献发现系统——项目管理
    终审项目展示
    M2事后会议报告
    【Beta版本发布】爬虫队长装备全面更新!
    Beta版本测试报告
    Beta阶段爬取数目预估
    团队作业Week14——源代码管理
    Daily Scrum NO.10
  • 原文地址:https://www.cnblogs.com/taoshihan/p/15469821.html
Copyright © 2011-2022 走看看