Rumah > pangkalan data > tutorial mysql > MySQL HINT:Straight_JOIN

MySQL HINT:Straight_JOIN

WBOY
Lepaskan: 2016-06-07 16:14:42
asal
1114 orang telah melayarinya

来自生产环境的朋友、可能都会碰到: 原本运行良好的查询语句,过了一段时间后,可能会突然变得很糟糕 一个很大可能的原因就是数据分布情况发生了变化 从而导致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)的时候
        ==>也就是驱动表的记录集比较小(
        
        
        
        
     一般的优化操作:
     
     
     ① show full processlist;
     ② explain + TOP-SQL ;
     
     注意:在EXPLAIN结果中,第一行出现的表就是驱动表
     
     
     
     
     一个经典优化例子:
     
     当explian输出结果中含:「Using filesort」,甚至「Using temporary」
     我们就该擦亮双眼、像打了鸡血一样、保持时刻优化的姿态

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

 

 

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan