存储过程写法问题
请问,在存储过程里我做一个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代价,
如果连接字段设置不好,出现表扫描,效率就差,
但后者读出的数据一多, 就是找死