MySQLHINT:Straight_JOIN
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQLHINT:Straight_JOIN,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1531字,纯文字阅读大概需要3分钟。
内容图文
来自生产环境的朋友、可能都会碰到: 原本运行良好的查询语句,过了一段时间后,可能会突然变得很糟糕 一个很大可能的原因就是数据分布情况发生了变化 从而导致MySQL优化器对驱动表的选择发生了变化,进而出现索引失效的情况 所以、闲着蛋疼喝咖啡的时候、应
来自生产环境的朋友、可能都会碰到:原本运行良好的查询语句,过了一段时间后,可能会突然变得很糟糕
一个很大可能的原因就是数据分布情况发生了变化
从而导致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」
我们就该擦亮双眼、像打了鸡血一样、保持时刻优化的姿态
此刻的优化就容易多了、尽可能保证排序字段在驱动表中
内容总结
以上是互联网集市为您收集整理的MySQLHINT:Straight_JOIN全部内容,希望文章能够帮你解决MySQLHINT:Straight_JOIN所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。