首页 > Linux操作系统 > Linux操作系统 > Transitivity
Transitivity,所谓的传递性,如下:
SQL> select ... from T1, T2
2 where T1.col1 = T2.col1
3 and T1.col1 = 100;
等价于:
SQL> select ... from T1, T2
2 where T1.col1 = T2.col
3 and T1.col1 = 100
4 and T2.col1 = 100;
测试如下:
SQL> desc t1;
Name Null? Type
----------------------------------------- -------- ----------------------------
A NUMBER(10)
SQL> desc t2;
Name Null? Type
----------------------------------------- -------- ----------------------------
A NUMBER(10)
SQL> select table_name,index_name,column_name,column_position from user_ind_columns
2 where table_name in('T1','T2');
TABLE_NAME INDEX_NAME COLUMN_NAME COLUMN_POSITION
------------------------------ ------------------------------ ------------------------------ ---------------
T1 IDX_T1 A 1
T2 IDX_T2 A 1
SQL> set autot on
SQL> select * from t1,t2 where t1.a=t2.a and t1.a=1000;
A A
---------- ----------
1000 1000
Execution Plan
----------------------------------------------------------
Plan hash value: 3652879785
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 5 (0)| 00:00:01 |
| 1 | MERGE JOIN CARTESIAN| | 1 | 8 | 5 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_T1 | 1 | 4 | 3 (0)| 00:00:01 |
| 3 | BUFFER SORT | | 1 | 4 | 2 (0)| 00:00:01 |
|* 4 | INDEX RANGE SCAN | IDX_T2 | 1 | 4 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("T1"."A"=1000)
4 - access("T2"."A"=1000)
可以看到, 4 - access("T2"."A"=1000)这一行是优化器执行了Transitivity的结果。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10972173/viewspace-611454/ ,如需转载,请注明出处,否则将追究法律责任。