OR KEY2 = 20 £¨·µ»Ø×î¶à¼Ç¼£© ORACLE ÄÚ²¿½«ÒÔÉÏת»»Îª
WHERE KEY1 = 10 AND£¨£¨NOT KEY1 = 10£© AND KEY2 = 20£© ÒëÕß°´£º
ÏÂÃæµÄ²âÊÔÊý¾Ý½ö¹©²Î¿¼£º £¨a = 1003 ·µ»ØÒ»Ìõ¼Ç¼ £¬ b = 1 ·µ»Ø1003Ìõ¼Ç¼£© SQL> select * from unionvsor /*1st test*/ 2 where a = 1003 or b = 1£» 1003 rows selected. Execution Plan
---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 CONCATENATION
2 1 TABLE ACCESS £¨BY INDEX ROWID£© OF 'UNIONVSOR' 3 2 INDEX £¨RANGE SCAN£© OF 'UB' £¨NON-UNIQUE£© 4 1 TABLE ACCESS £¨BY INDEX ROWID£© OF 'UNIONVSOR' 5 4 INDEX £¨RANGE SCAN£© OF 'UA' £¨NON-UNIQUE£© Statistics
---------------------------------------------------------- 0 recursive calls 0 db block gets 144 consistent gets 0 physical reads 0 redo size
63749 bytes sent via SQL*Net to client 7751 bytes received via SQL*Net from client 68 SQL*Net roundtrips to/from client 0 sorts £¨memory£© 0 sorts £¨disk£© 1003 rows processed
SQL> select * from unionvsor /*2nd test*/ 2 where b = 1 or a = 1003 £» 1003 rows selected. Execution Plan
---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 CONCATENATION
2 1 TABLE ACCESS £¨BY INDEX ROWID£© OF 'UNIONVSOR' 3 2 INDEX £¨RANGE SCAN£© OF 'UA' £¨NON-UNIQUE£© 4 1 TABLE ACCESS £¨BY INDEX ROWID£© OF 'UNIONVSOR' 5 4 INDEX £¨RANGE SCAN£© OF 'UB' £¨NON-UNIQUE£© Statistics
---------------------------------------------------------- 0 recursive calls 0 db block gets
143 consistent gets 0 physical reads 0 redo size
63749 bytes sent via SQL*Net to client 7751 bytes received via SQL*Net from client
68 SQL*Net roundtrips to/from client 0 sorts £¨memory£© 0 sorts £¨disk£© 1003 rows processed
SQL> select * from unionvsor /*3rd test*/ 2 where a = 1003 3 union
4 select * from unionvsor 5 where b = 1£»
1003 rows selected. Execution Plan
---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 SORT £¨UNIQUE£© 2 1 UNION-ALL
3 2 TABLE ACCESS £¨BY INDEX ROWID£© OF 'UNIONVSOR' 4 3 INDEX £¨RANGE SCAN£© OF 'UA' £¨NON-UNIQUE£© 5 2 TABLE ACCESS £¨BY INDEX ROWID£© OF 'UNIONVSOR' 6 5 INDEX £¨RANGE SCAN£© OF 'UB' £¨NON-UNIQUE£© Statistics
---------------------------------------------------------- 0 recursive calls 0 db block gets 10 consistent gets 0 physical reads 0 redo size
63735 bytes sent via SQL*Net to client 7751 bytes received via SQL*Net from client
68 SQL*Net roundtrips to/from client 1 sorts £¨memory£© 0 sorts £¨disk£© 1003 rows processed
ÓÃUNIONµÄЧ¹û¿ÉÒÔ´Óconsistent getsºÍ SQL*NETµÄÊý¾Ý½»»»Á¿µÄ¼õÉÙ¿´³ö 37. ÓÃINÀ´Ìæ»»OR
ÏÂÃæµÄ²éѯ¿ÉÒÔ±»¸üÓÐЧÂʵÄÓï¾äÌæ»»£º µÍЧ£º SELECT¡
FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30 ¸ßЧ£º
SELECT?
FROM LOCATION
WHERE LOC_IN IN £¨10£¬20£¬30£©£»
ÒëÕß°´£ºÕâÊÇÒ»Ìõ¼òµ¥Ò׼ǵĹæÔò£¬µ«ÊÇʵ¼ÊµÄÖ´ÐÐЧ¹û»¹Ðë¼ìÑ飬ÔÚORACLE8iÏ£¬Á½ÕßµÄÖ´Ðз¾¶ËƺõÊÇÏàͬµÄ¡£
38. ±ÜÃâÔÚË÷ÒýÁÐÉÏʹÓÃIS NULLºÍIS NOT NULL ±ÜÃâÔÚË÷ÒýÖÐʹÓÃÈκοÉÒÔΪ¿ÕµÄÁУ¬ORACLE½«ÎÞ·¨Ê¹ÓøÃË÷Òý¡£¶ÔÓÚµ¥ÁÐË÷Òý£¬Èç¹ûÁаüº¬¿ÕÖµ£¬Ë÷ÒýÖн«²»´æÔڴ˼Ǽ¡£ ¶ÔÓÚ¸´ºÏË÷Òý£¬Èç¹ûÿ¸öÁж¼Îª¿Õ£¬Ë÷ÒýÖÐͬÑù²»´æÔڴ˼Ǽ¡£ Èç¹ûÖÁÉÙÓÐÒ»¸öÁв»Îª¿Õ£¬Ôò¼Ç¼´æÔÚÓÚË÷ÒýÖС£ ¾ÙÀý£º
Èç¹ûΨһÐÔË÷Òý½¨Á¢ÔÚ±íµÄAÁкÍBÁÐÉÏ£¬ ²¢ÇÒ±íÖдæÔÚÒ»Ìõ¼Ç¼µÄA£¬BֵΪ£¨123£¬null£© £¬ ORACLE½«²»½ÓÊÜÏÂÒ»Ìõ¾ßÓÐÏàͬA£¬BÖµ£¨123£¬null£©µÄ¼Ç¼£¨²åÈ룩¡£ È»¶øÈç¹ûËùÓеÄË÷ÒýÁж¼Îª¿Õ£¬ORACLE½«ÈÏΪÕû¸ö¼üֵΪ¿Õ¶ø¿Õ²»µÈÓÚ¿Õ¡£ Òò´ËÄã¿ÉÒÔ²åÈë1000Ìõ¾ßÓÐÏàͬ¼üÖµµÄ¼Ç¼£¬µ±È»ËüÃǶ¼Êǿգ¡ ÒòΪ¿ÕÖµ²»´æÔÚÓÚË÷ÒýÁÐÖУ¬ËùÒÔWHERE×Ó¾äÖжÔË÷ÒýÁнøÐпÕÖµ±È½Ï½«Ê¹ORACLEÍ£ÓøÃË÷Òý¡£ ¾ÙÀý£º
µÍЧ£º £¨Ë÷ÒýʧЧ£© SELECT ¡
FROM DEPARTMENT
WHERE DEPT_CODE IS NOT NULL£» ¸ßЧ£º £¨Ë÷ÒýÓÐЧ£© SELECT ¡
FROM DEPARTMENT WHERE DEPT_CODE >=0£» 39. ×ÜÊÇʹÓÃË÷ÒýµÄµÚÒ»¸öÁÐ
Èç¹ûË÷ÒýÊǽ¨Á¢ÔÚ¶à¸öÁÐÉÏ£¬ Ö»ÓÐÔÚËüµÄµÚÒ»¸öÁУ¨leading column£©±»where×Ó¾äÒýÓÃʱ£¬ÓÅ»¯Æ÷²Å»áÑ¡ÔñʹÓøÃË÷Òý¡£
ÒëÕß°´£ºÕâÒ²ÊÇÒ»Ìõ¼òµ¥¶øÖØÒªµÄ¹æÔò¡£ ¼ûÒÔÏÂʵÀý¡£
SQL> create table multiindexusage £¨ inda number £¬ indb number £¬ descr varchar2£¨10£©£©£» Table created.
SQL> create index multindex on multiindexusage£¨inda£¬indb£©£» Index created.
SQL> set autotrace traceonly
SQL> select * from multiindexusage where inda = 1£» Execution Plan
---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS £¨BY INDEX ROWID£© OF 'MULTIINDEXUSAGE' 2 1 INDEX £¨RANGE SCAN£© OF 'MULTINDEX' £¨NON-UNIQUE£© SQL> select * from multiindexusage where indb = 1£» Execution Plan
---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS £¨FULL£© OF 'MULTIINDEXUSAGE'
ºÜÃ÷ÏÔ£¬ µ±½öÒýÓÃË÷ÒýµÄµÚ¶þ¸öÁÐʱ£¬ÓÅ»¯Æ÷ʹÓÃÁËÈ«±íɨÃè¶øºöÂÔÁËË÷Òý 40. ORACLEÄÚ²¿²Ù×÷
µ±Ö´Ðвéѯʱ£¬ORACLE²ÉÓÃÁËÄÚ²¿µÄ²Ù×÷¡£ ϱíÏÔʾÁ˼¸ÖÖÖØÒªµÄÄÚ²¿²Ù×÷¡£
ORACLE Clause ORDER BY UNION MINUS INTERSECT DISTINCT,MINUS,INTERSECT,UNION MIN,MAX,COUNT GROUP BY ROWNUM Queries involving Joins CONNECT BY
ÄÚ²¿²Ù×÷ SORT ORDER BY UNION-ALL MINUS INTERSECT SORT UNIQUE SORT AGGREGATE SORT GROUP BY COUNT or COUNT STOPKEY SORT JOIN,MERGE JOIN,NESTED LOOPS CONNECT BY 41. ÓÃUNION-ALL Ìæ»»UNION £¨ Èç¹ûÓпÉÄܵϰ£©
µ±SQLÓï¾äÐèÒªUNIONÁ½¸ö²éѯ½á¹û¼¯ºÏʱ£¬ÕâÁ½¸ö½á¹û¼¯ºÏ»áÒÔUNION-ALLµÄ·½Ê½±»ºÏ²¢£¬ È»ºóÔÚÊä³ö×îÖÕ½á¹ûǰ½øÐÐÅÅÐò¡£
Èç¹ûÓÃUNION ALLÌæ´úUNION£¬ ÕâÑùÅÅÐò¾Í²»ÊDZØÒªÁË¡£ ЧÂʾͻáÒò´ËµÃµ½Ìá¸ß¡£ ¾ÙÀý£º µÍЧ£º
SELECT ACCT_NUM£¬ BALANCE_AMT FROM DEBIT_TRANSACTIONS WHERE TRAN_DATE = ¡®31-DEC-95¡¯ UNION
SELECT ACCT_NUM£¬ BALANCE_AMT FROM DEBIT_TRANSACTIONS WHERE TRAN_DATE = ¡®31-DEC-95¡¯ ¸ßЧ£º
SELECT ACCT_NUM£¬ BALANCE_AMT FROM DEBIT_TRANSACTIONS WHERE TRAN_DATE = ¡®31-DEC-95¡¯ UNION ALL
SELECT ACCT_NUM£¬ BALANCE_AMT FROM DEBIT_TRANSACTIONS WHERE TRAN_DATE = ¡®31-DEC-95¡¯
ÒëÕß°´£ºÐèҪעÒâµÄÊÇ£¬UNION ALL ½«Öظ´Êä³öÁ½¸ö½á¹û¼¯ºÏÖÐÏàͬ¼Ç¼¡£ Òò´Ë¸÷λ»¹ÊÇÒª´ÓÒµÎñÐèÇó·ÖÎöʹÓÃUNION ALLµÄ¿ÉÐÐÐÔ¡£
UNION ½«¶Ô½á¹û¼¯ºÏÅÅÐò£¬Õâ¸ö²Ù×÷»áʹÓõ½SORT_AREA_SIZEÕâ¿éÄÚ´æ¡£ ¶ÔÓÚÕâ¿éÄÚ´æµÄÓÅ»¯Ò²ÊÇÏàµ±ÖØÒªµÄ¡£ ÏÂÃæµÄSQL¿ÉÒÔÓÃÀ´²éѯÅÅÐòµÄÏûºÄÁ¿ Select substr£¨name£¬1£¬25£© \£¬ substr£¨value£¬1£¬15£© \ from v$sysstat where name like 'sort%'
Ïà¹ØÍÆ¼ö£º