Mysql谓词下推技术
上次和一个朋友在讨论一个Mysql连接的优化,他的观点是有对于
where条件的限制的表,可以先对这个表写一个from视图,在视图中先
用where条件做限制,然后再来做连接
原始语句是这样的
select *
from sbtest t1 join snapshot t2 on t1.id=t2.id
where t2.snap_id=1420637262
改成如下的形式
select *
from sbtest t1 join (select * from snapshot where snap_id=1420637262) t2
on t1.id=t2.id
这种观点主要是思想是对于有where条件限制的表,先尽量做限制。但是这种方式真的会执行率高吗? 我们首先来看看执行计划
mysql> explain
-> select *
-> from sbtest t1 join (select * from snapshot where snap_id=1420637262) t2
-> on t1.id=t2.id;
+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra