用不用join
在实际生产中,关于join语句使用的问题,一般会集中在以下两类:
-
我们DBA不让使用join,使用join有什么问题呢?
-
如果有两个大小不同的表做join,应该用哪个表做驱动表呢?
今天这篇文章,我就先跟你说说join语句到底是怎么执行的,然后再来回答这两个问题。
为了便于量化分析,我还是创建两个表t1和t2来和你说明。
CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `a` (`a`)
) ENGINE=InnoDB;
drop procedure idata;
delimiter ;;
create procedure idata()
begin
declare i int;
set i=1;
while(i<=1000)do
insert into t2 values(i, i, i);
set i=i+1;
end while;
end;;
delimiter ;
call idata();
create table t1 like t2;
insert into t1 (select * from t2 where id<=100)
可以看到,这两个表都有一个主键索引id和一个索引a,字段b上无索引。存储过程idata()往表t2里