日期:2014-05-17  浏览次数:20790 次

存储过程写法问题
请问,在存储过程里我做一个3表连接的查询,WHERE条件是一个表的主键
请问我是写3表联合查询比较快,还是分开一个表一个表查询比较快
当然我认为是联合查询比较好,但是我想听更详细点的说法。

例如
1. 3表联合查询
select C.d from A,B,C
 WHERE A.b = B.b
 AND B.c = C.c
 AND A.a = 1;
2. 分开写
select A.b into v_b from A 
 WHERE A.a = 1;
select B.c into v_c FROM B
 WHERE B.b = v_b;
select C.d FROM C
 WHERE C.c = V_c;   

------解决方案--------------------
我觉得代码的可读性也很重要
------解决方案--------------------
引用:
请问,在存储过程里我做一个3表连接的查询,WHERE条件是一个表的主键
请问我是写3表联合查询比较快,还是分开一个表一个表查询比较快
当然我认为是联合查询比较好,但是我想听更详细点的说法。

例如
1. 3表联合查询
select C.d from A,B,C
 WHERE A.b = B.b
 AND B.c = C.c
 AND A.a = 1;
2. 分开写
select A.b into v_b from A 
 WHERE A.a = 1;
select B.c into v_c FROM B
 WHERE B.b = v_b;
select C.d FROM C
 WHERE C.c = V_c;   


分开写的话如果查询记录有多条的话,这样会报错。而且如楼上所说,代码可读性不强。优先选择3表联合查询吧。只要建立了合适的索引,这种方式更通用一些。
------解决方案--------------------
还是三个表连接会快点。因为第二中方法貌似是用循环的方法,效率是很低的。
------解决方案--------------------
肯定是1了、
------解决方案--------------------
效率应该高一些。
------解决方案--------------------
要考虑IO代价,
如果连接字段设置不好,出现表扫描,效率就差,
但后者读出的数据一多, 就是找死