oracle联合查询优化问题
时间:2011-12-28
来源:互联网
现在比如我有三张表test1 ,test2,test3
SQL code
create table test1( id number primary key, name1 varchar2(20), t_test2_id number foreign key--------指向test2 ) create table test2( id number primary key, name2 varchar2(20), t_test3_id number foreign key--------指向test3 ) create table test3( id number primary key, name3 varchar2(20) )
我现在需要每个表中的name*那个字段,并且排除表2中的一些记录,比如id为1,3,5,7,9,10这些的。
直接用
SQL code
select t1.id,t1.name1,t2.name2,t3.name3 from test1 t1,test2 t2,test3,t3 where t1.t_test2_id = t2.id and t2.t_test3_id = t3.id and t2.id not in(1,3,5,7,9,10);
这样貌似很低的效率,假设数据量过千万
作者: lxm_yl 发布时间: 2011-12-28
where t1.t_test2_id not in(1,3,5,7,9,10) and t1.t_test2_id = t2.id and t2.t_test3_id = t3.id。
从执行顺序上,应该先遍历t1表,遍历时,第一个条件能否定的就应该不会再执行后面的条件,只是自己瞎猜的。
从实际运行角度而言,最好做成3个检索。t1表条件检索,t2表条件检索,t3表全检索。然后其他处理可放到程序中来做。将t2,t3表的数据做成map。运行速度也不会太差。这样数据库的负担也能少些。
作者: dntg007 发布时间: 2011-12-28
说实话,sql本身不觉得能够优化了,
要不你就做个视图
作者: maliang18 发布时间: 2011-12-28

作者: lxm_yl 发布时间: 2011-12-28
作者: dntg007 发布时间: 2011-12-28
作者: yin_slin 发布时间: 2011-12-28
如果有数千万,比如t1、t2、t3都有1千万,那你这样查出来的数据可就有1000万 * 100万(除掉部分数据,假定剩下100万) * 1000万的数据量了,你真的需要这么多数据?如果真的需要,那这个查询效率很高了,优化余地不大,如果不需要这么多,最好在应用程序中优化,尽量减轻数据库的压力。

作者: lxm_yl 发布时间: 2011-12-28
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28