来自生产环境的朋友、可能都会碰到:
     
     原本运行良好的查询语句,过了一段时间后,可能会突然变得很糟糕
     一个很大可能的原因就是数据分布情况发生了变化
     从而导致MySQL优化器对驱动表的选择发生了变化,进而出现索引失效的情况
     所以、闲着蛋疼喝咖啡的时候、应该多收集两下表的统计信息
     
     
     这个时候、Straight_JOIN 闪亮登场
     
     
     MySQL 只支持 Nested Loop Join、关于这个Nested JOIN的详细用法请参阅偶之前blog:点击打开链接
     和Oracle对比下、不然得知、Straight_JOIN相当于Oracle里面的:USE_NL、所以、原理和适用上大概都是相同的、
     不过、对于驱动表的选择、MySQL 优化器可能没有Oracle那般智能、MySQL采用简单粗暴的方法:
     哪个表的结果集小,就以哪个表为驱动表
     
     
     
      偶赶脚有2 种原因可令你选择 Straight_JOIN 
     
     ① MySQL 优化器不给力、错误选择驱动表
     ② Nested Loop Join 的适用场景:
        ==>一般用在连接的表中有索引,并且索引选择性较好(也就是Selectivity接近1)的时候
        ==>也就是驱动表的记录集比较小(<10000)而且inner表需要有有效的访问方法(Index)
        
        
        
        
      一般的优化操作:
     
     
     ① show full processlist; <===查找TOP-SQL 
     ② explain + TOP-SQL ; <===查询SQL 执行计划
     
     注意:在EXPLAIN结果中,第一行出现的表就是驱动表
     
     
     
     
      一个经典优化例子:
     
     当explian输出结果中含:「Using filesort」,甚至「Using temporary」
     我们就该擦亮双眼、像打了鸡血一样、保持时刻优化的姿态

此刻的优化就容易多了、尽可能保证排序字段在驱动表中

By David Lin

2013-06-23

Good Luck

MySQL HINT:Straight_JOIN相关推荐

  1. mysql基础搭建_MySql基础-构建MySql数据库:安装MySql-server、MySql-client

    1 构建MySQL服务器 1.1 问题 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 ...

  2. mysql 1449 : The user specified as a definer ('root'@'%') does not exist

    在项目中修改数据,后台报错: mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决:原因是你对数据中一 ...

  3. mysql七:视图、触发器、事务、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...

  4. mysql体系结构:

    mysql体系结构:     由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件.                 缓冲组件.插件式存储引擎.物理文件组成.     mys ...

  5. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

  6. Mysql实战:主从同步

    在两台机器上安装MySQL.主机地址分别为: Master:192.168.11.104 Slave:192.168.11.103 启动mysql服务:/etc/init.d/mysql  start ...

  7. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  8. MySQL内核:InnoDB存储引擎 卷1

    MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...

  9. MySQL数据库:事务和ACID实现原理

    一.什么是事务: 数据库的事务是并发控制的基本单位,是指逻辑上的一组操作,要么全部执行,要么全部不执行. 1.事务的特性: (1)原子性:事务是一个不可分割的工作单元,事务里的操作要么都成功,要么都失 ...

最新文章

  1. Odoo 学习 【二】Environment 概览
  2. 探索“老药新用”最短路径:亚马逊AI Lab开源大规模药物重定位知识图谱DRKG
  3. 【Android 面试基础知识点整理】
  4. python语句讲解_python语句讲解_python语句讲解
  5. python opencv-4.1.0 cv::HersheyFonts 文字类型
  6. linux 安装 memcached
  7. CRM 里面table download to excel的实现
  8. php 405跳转,php – 返回HTTP 405的CORS预检请求
  9. 史上最全换档讲解手动档汽车的换挡技巧
  10. 虚拟专题:联邦学习 | 联邦可视化:一种隐私保护的可视化新模型
  11. AI 时代,为什么程序员很贵?
  12. 职务作品的著作权归属情况分析
  13. 2. PDO 的使用
  14. PIC温控器c语言程序,PIC CCS C语言程序范例.doc
  15. Qt Creator使用clang-format格式化代码
  16. 2011中国 · 移动开发者大会侧记
  17. 字幕集合保存为srt文件
  18. 棋牌PHP域源码,微信棋牌源码下载( h5.super-mans。com Q:2012035031)
  19. mysql写出总分最高的学生姓名_编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数...
  20. 单链表的头插法与尾插法详解

热门文章

  1. 归纳:数据库设计的六个阶段详解(有这一篇就够了)
  2. 云专网和云专线的区别_云专线的优势及应用场景
  3. linux中facl有什么作用,在Linux中使用setfacl后权限被拒绝
  4. 一家创业公司,如何服务好数百企业?
  5. 瞎说系列之Object.assign入门
  6. GIt本地相关操作(一)
  7. 标准缺失成发展阻碍 智能家居普及之路任重而道远
  8. Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系
  9. CSS三种写法的优先级
  10. openstack 使用集锦