来自生产环境的朋友、可能都会碰到:
     
     原本运行良好的查询语句,过了一段时间后,可能会突然变得很糟糕
     一个很大可能的原因就是数据分布情况发生了变化
     从而导致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

最新文章

  1. bash编程之多分支if 语句及for循环
  2. 1.0 Quartz 2D 简介
  3. MySQL\MariaDB 多线程复制初探
  4. [HDU 2126] Buy the souvenirs (动态规划)
  5. LightOj_1287 Where to Run
  6. 美版SOLOWHEEL与盗版SOLOWHEEL-IPS独轮车终极PK【图】_厂商资讯_太平洋电脑网
  7. asp.net core mvc剖析:KestrelServer
  8. jquery小测
  9. MyBatis从入门到放弃六:延迟加载、一级缓存、二级缓存
  10. 201521123018 《Java程序设计》第10周学习总结
  11. Shodan在渗透测试及漏洞挖掘中的一些用法
  12. switchery按钮使用
  13. Web开发学习之路--Eclipse+Tomcat+mysql之初体验
  14. 如何在shell脚本中判断文件或者文件夹是否存在?
  15. python爬虫从入门到放弃(九)之 Requests+正则表达式爬取猫眼电影TOP100
  16. 向jsp中引入公共文件
  17. [转帖]ASP.NET的版本?
  18. c++ 判断容器A是否是容器B的子集,如果是,返回true(includes)
  19. np.stack() 与 tf.stack() 的简单理解
  20. Python 2 和 Python 3 有哪些主要区别

热门文章

  1. python 求值表达式解析
  2. VMware Player 使用错误集锦
  3. 【linux kernel】 中断处理-中断下半部
  4. Wireshark安装、简单使用、过滤器简介
  5. Android学习之一:Cygwin简介
  6. 湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)
  7. UVA 644 Immediate Decodability (字符处理)
  8. Servlet的学习(三)
  9. linux添加用户
  10. &lt;IMG&gt;中UserMap的用法