1.在oracle中,多表连接的时候,怎么加hint条件,使oracle按照设定的顺序进行表连接。
2.表连接的时候,大表与小表的顺序是哪个在前.
3.在多表连接时,是表与表先连接起来,再执行对单表的限制条件where条件;还是先执行单表的限制where条件,再进行表连接?
4.多表连接时,如4个表,我自己做了一个实验:4个表连接执行查询vs2个表查询放入临时表再关联到一起查询。结果是后者的效率更高些。没有想通是问什么,按道理,后者有更多的io耗费呀!
以上问题,求解...
2.表连接的时候,大表与小表的顺序是哪个在前.
3.在多表连接时,是表与表先连接起来,再执行对单表的限制条件where条件;还是先执行单表的限制where条件,再进行表连接?
4.多表连接时,如4个表,我自己做了一个实验:4个表连接执行查询vs2个表查询放入临时表再关联到一起查询。结果是后者的效率更高些。没有想通是问什么,按道理,后者有更多的io耗费呀!
以上问题,求解...
解决方案 »
- 高手请进:点评数据库设计
- 请教几个问题
- 请帮忙看一下这条创建表的语句是什么意思
- oracle 全文检索 pdf格式文件 生成的dr$myindex$i 表中 token_text字段乱码
- 请问,在Oracle下怎样用Sql语句实现:“指定一个字段为主键;当有记录进入该表时,主键自动加一(就类似Access中的ID字段!)”
- plsql输出函数
- SQL PLUS如何在网页里打开
- 如何彻底删除Oracle实例?
- 一个酷似本论坛的SQL语句设计问题,急!!
- 如何在clob中存取大型中文对象?
- oracle小白求教在V$sqlarea 中SQL_TEXT查看执行过的SQL语句
- 双机装oracle,进程因错误而终止。!!!!!
drop table temp;
create table temp( t1 varchar2(10),t2 varchar2(10));
insert into temp values('zm','abcde');
insert into temp values('sz','1');
insert into temp values('sz','2');
commit; 1. select * from temp where to_number(t2)>1 and t1='sz'; 2. select * from temp where t1='sz' and to_number(t2)>1; 在9i上执行, 第1条语句执行不会出错,第2条语句会提示“无效的数字” 在10G上执行,两条语句都不会出错。 说明:9i上,SQL条件的执行确实是从右到左的,但是10G做了什么调整呢? 实验三:证明了在10g上SQL条件的执行是从右到左的Create Or Replace Function F1(v_In Varchar2) Return Varchar2 Is
Begin
Dbms_Output.Put_Line('exec F1');
Return v_In;
End F1;
/
Create Or Replace Function F2(v_In Varchar2) Return Varchar2 Is
Begin
Dbms_Output.Put_Line('exec F2');
Return v_In;
End F2;
/
SQL> set serverout on;
SQL> select 1 from dual where f1('1')='1' and f2('1')='1';
1
----------
1
exec F2
exec F1
SQL> select 1 from dual where f2('1')='1' and f1('1')='1';
1
----------
1
exec F1
exec F2 结果表明,SQL条件的执行顺序是从右到左的。 那么,根据这个结果来分析,把能使结果最少的条件放在最右边,是否会减少其它条件执行时所用的记录数量,从而提高性能呢? 例如:下面的SQL条件,是否应该调整SQL条件的顺序呢? Where A.结帐id Is Not Null And A.记录状态<>0 And A.记帐费用=1 And (Nvl(A.实收金额, 0)<>Nvl(A.结帐金额, 0) Or Nvl(A.结帐金额, 0)=0) And A.病人ID=[1] And Instr([2],','||Nvl(A.主页ID,0)||',')>0 And A.登记时间Between [3] And [4] And A.门诊标志<>1 实际上,从这条SQL语句的执行计划来分析,Oracle首先会找出条件中使用索引或表间连接的条件,以此来过滤数据集,然后对这些结果数据块所涉及的记录逐一检查是否符合所有条件,所以条件顺序对性能几乎没有影响。Create Or Replace Function F1(v_In Varchar2) Return Varchar2 Is
Begin
Dbms_Output.Put_Line('exec F1');
Return v_In;
End F1;
/
Create Or Replace Function F2(v_In Varchar2) Return Varchar2 Is
Begin
Dbms_Output.Put_Line('exec F2');
Return v_In;
End F2;
/
SQL> set serverout on;
SQL> select 1 from dual where f1('1')='1' and f2('1')='1';
1
----------
1
exec F2
exec F1
SQL> select 1 from dual where f2('1')='1' and f1('1')='1';
1
----------
1
exec F1
exec F2 结果表明,SQL条件的执行顺序是从右到左的。 那么,根据这个结果来分析,把能使结果最少的条件放在最右边,是否会减少其它条件执行时所用的记录数量,从而提高性能呢? 例如:下面的SQL条件,是否应该调整SQL条件的顺序呢? Where A.结帐id Is Not Null And A.记录状态<>0 And A.记帐费用=1 And (Nvl(A.实收金额, 0)<>Nvl(A.结帐金额, 0) Or Nvl(A.结帐金额, 0)=0) And A.病人ID=[1] And Instr([2],','||Nvl(A.主页ID,0)||',')>0 And A.登记时间Between [3] And [4] And A.门诊标志<>1 实际上,从这条SQL语句的执行计划来分析,Oracle首先会找出条件中使用索引或表间连接的条件,以此来过滤数据集,然后对这些结果数据块所涉及的记录逐一检查是否符合所有条件,所以条件顺序对性能几乎没有影响。
3,先where条件后连接多表,缩小关联表的数据量
4,临时表虽然浪费io,但是省了内存,数据量大的时候,反而效率更高