ºìÁªLinuxÃÅ»§
Linux°ïÖú

Oracle10gÖÐеÄSQLoptimizerhints

·¢²¼Ê±¼ä:2006-11-11 00:56:06À´Ô´:ºìÁª×÷Õß:pinkfirex
OracleʹÓõÄhintsµ÷Õû»úÖÆÒ»Ö±ºÜ¸´ÔÓ£¬Oracle Technical Network¶ÔʹÓÃhintsµ÷ÕûOracle SQLµÄ¹ý³ÌÓкܺõÄÈ«ÃæÆÀÊö¡£¸ù¾Ý¶Ô10gÊý¾Ý¿âµÄ½éÉÜ£¬¿ÉʹÓøü¶àеÄoptimizer hintsÀ´¿ØÖÆÓÅ»¯ÐÐΪ¡£ÏÖÔÚÈÃÎÒÃÇѸËÙÁ˽âÒ»ÏÂÕâЩǿ´óµÄÐÂhints:

spread_min_analysis

ʹÓÃÕâÒ»hint£¬Äã¿ÉÒÔºöÂÔһЩ¹ØÓÚÈçÏêϸµÄ¹ØϵÒÀÀµÍ¼·ÖÎöµÈµç×Ó±í¸ñµÄ±àÒëʱ¼äÓÅ»¯¹æÔò¡£ÆäËûµÄһЩÓÅ»¯£¬Èç´´½¨¹ýÂËÒÔÓÐÑ¡ÔñÐԵĶ¨Î»µç×Ó±í¸ñ·ÃÎʽṹ²¢ÏÞÖÆÐÞ¶©¹æÔòµÈ£¬µÃµ½Á˼ÌÐøʹÓá£

ÓÉÓÚÔÚ¹æÔòÊý·Ç³£´óµÄÇé¿öÏ£¬µç×Ó±í¸ñ·ÖÎö»áºÜ³¤¡£ÕâÒ»Ìáʾ¿ÉÒÔ°ïÖúÎÒÃǼõÉÙÓɴ˲úÉúµÄÊýÒÔ°ÙСʱ¼ÆµÄ±àÒëʱ¼ä¡£

ÀýÈç:

SELECT /*+ SPREAD_MIN_ANALYSIS */ ...


spread_no_analysis

ͨ¹ýÕâÒ»hint£¬¿ÉÒÔʹÎÞµç×Ó±í¸ñ·ÖÎö³ÉΪ¿ÉÄÜ¡£Í¬Ñù£¬Ê¹ÓÃÕâÒ»hint¿ÉÒÔºöÂÔÐÞ¶©¹æÔòºÍ¹ýÂ˲úÉú¡£Èç¹û´æÔÚÒ»µç×Ó±í¸ñ·ÖÎö£¬±àÒëʱ¼ä¿ÉÒÔ±»¼õÉÙµ½×îµÍ³Ì¶È¡£

ÀýÈç:

SELECT /*+ SPREAD_NO_ANALYSIS */ ...


use_nl_with_index

ÕâÏîhintʹCBOͨ¹ýǶÌ×Ñ­»·°ÑÌض¨µÄ±í¸ñ¼ÓÈëµ½ÁíһԭʼÐС£Ö»ÓÐÔÚÒÔÏÂÇé¿öÖУ¬Ëü²ÅʹÓÃÌض¨±í¸ñ×÷ΪÄÚ²¿±í¸ñ:Èç¹ûûÓÐÖ¸¶¨±êÇ©£¬CBO±ØÐë¿ÉÒÔʹÓÃһЩ±êÇ©£¬ÇÒÕâЩ±êÇ©ÖÁÉÙÓÐÒ»¸ö×÷ΪË÷Òý¼üÖµ¼ÓÈëÅжÏ;·´Ö®£¬CBO±ØÐëÄܹ»Ê¹ÓÃÖÁÉÙÓÐÒ»¸ö×÷ΪË÷Òý¼üÖµ¼ÓÈëÅжϵıêÇ©¡£

ÀýÈç:

SELECT /*+ USE_NL_WITH_INDEX (polrecpolrind) */ ...


CARDINALITY

´Ëhint¶¨ÒåÁ˶ÔÓɲéѯ»ò²éѯ²¿·Ö·µ»ØµÄ»ùÊýµÄÆÀ¼Û¡£×¢ÒâÈç¹ûûÓж¨Òå±í¸ñ£¬»ùÊýÊÇÓÉÕû¸ö²éѯËù·µ»ØµÄ×ÜÐÐÊý¡£

ÀýÈç:

SELECT /*+ CARDINALITY ( [tablespec] card ) */


SELECTIVITY

´Ëhint¶¨ÒåÁ˶Բéѯ»ò²éѯ²¿·ÖÑ¡ÔñÐÔµÄÆÀ¼Û¡£Èç¹ûÖ»¶¨ÒåÁËÒ»¸ö±í¸ñ£¬Ñ¡ÔñÐÔÊÇÔÚËù¶¨Òå±í¸ñÀïÂú×ãËùÓе¥Ò»±í¸ñÅжϵÄÐв¿·Ö¡£Èç¹û¶¨ÒåÁËһϵÁбí¸ñ£¬Ñ¡ÔñÐÔÊÇÖ¸Ôںϲ¢ÒÔÈκÎ˳ÐòÂú×ãËùÓпÉÓÃÅжϵÄÈ«²¿±í¸ñºó£¬ËùµÃ½á¹ûÖеÄÐв¿·Ö¡£

ÀýÈç:

SELECT /*+ SELECTIVITY ( [tablespec] sel ) */


È»¶ø£¬×¢ÒâÈç¹ûhints CARDINALITY ºÍ SELECTIVITY¶¼¶¨ÒåÔÚͬÑùµÄÒ»Åú±í¸ñ£¬¶þÕ߶¼»á±»ºöÂÔ¡£

no_use_nl

Hint no_use_nlʹCBOÖ´ÐÐÑ­»·Ç¶Ì×£¬Í¨¹ý°ÑÖ¸¶¨±í¸ñ×÷ΪÄÚ²¿±í¸ñ£¬°Ñÿ¸öÖ¸¶¨±í¸ñÁ¬½Óµ½ÁíһԭʼÐС£Í¨¹ýÕâÒ»hint£¬Ö»ÓÐhash joinºÍsort-merge joins»áΪָ¶¨±í¸ñËù¿¼ÂÇ¡£

ÀýÈç:

SELECT /*+ NO_USE_NL ( employees ) */ ...


no_use_merge

´ËhintʹCBOͨ¹ý°ÑÖ¸¶¨±í¸ñ×÷ΪÄÚ²¿±í¸ñµÄ·½Ê½£¬¾Ü¾øsort-merge°Ñÿ¸öÖ¸¶¨±í¸ñ¼ÓÈëµ½ÁíһԭʼÐС£

ÀýÈç:

SELECT /*+ NO_USE_MERGE ( employees dept ) */ ...


no_use_hash

´ËhintʹCBOͨ¹ý°ÑÖ¸¶¨±í¸ñ×÷ΪÄÚ²¿±í¸ñµÄ·½Ê½£¬¾Ü¾øhash joins°Ñÿ¸öÖ¸¶¨±í¸ñ¼ÓÈëµ½ÁíһԭʼÐС£

ÀýÈç:

SELECT /*+ NO_USE_HASH ( employees dept ) */ ...


no_index_ffs

´ËhintʹCBO¾Ü¾ø¶ÔÖ¸¶¨±í¸ñµÄÖ¸¶¨±êÇ©½øÐÐfast full-index scan¡£


Syntax: /*+ NO_INDEX_FFS ( tablespecindexspec ) */


no_index_ss

´ËhintʹCBO¾Ü¾ø¶ÔÖ¸¶¨±í¸ñµÄÖ¸¶¨±êÇ©½øÐÐskip scan¡£


Syntax: /*+ NO_INDEX_SS (tablespecindexspec ) */


no_star_transformation

´ËhintʹCBOºöÂÔstar ѯÎÊÐÅÏ¢¡£


Syntax: /*+ NO_STAR_TRANSFORMATION */


index_ss

´ËhintÃ÷È·µØΪָ¶¨±í¸ñÑ¡Ôñindex skip scan¡£Èç¹ûÓï¾äʹÓÃindex range scan£¬Oracle½«ÒÔ¶ÔÆäË÷ÒýÖµµÄÉýÐòÅÅÁÐÀ´¼ì²éË÷ÒýÈë¿Ú¡£ÔÚ±»·Ö¸îµÄË÷ÒýÖУ¬Æä½á¹ûΪ¶Ôÿ¸ö²¿·ÖÄÚ²¿µÄÉýÐòÅÅÁС£


Syntax: /*+ INDEX_SS (tablespecindexspec) */


index_ss_asc

´ËhintÃ÷È·µØΪָ¶¨±í¸ñÑ¡Ôñindex skip scan¡£Èç¹ûÓï¾äʹÓÃindex range scan£¬Oracle½«ÒÔ¶ÔÆäË÷ÒýÖµµÄÉýÐòÅÅÁÐÀ´¼ì²éË÷ÒýÈë¿Ú¡£ÔÚ±»·Ö¸îµÄË÷ÒýÖУ¬Æä½á¹ûΪ¶Ôÿ¸ö²¿·ÖÄÚ²¿µÄÉýÐòÅÅÁС£


Syntax: /*+ INDEX_SS_ASC (tablespecindexspec) */


index_ss_desc

´ËhintÃ÷ȷΪָ¶¨±í¸ñÑ¡Ôñindex skip scan¡£Èç¹ûÓï¾äʹÓÃindex range scan£¬Oracle½«ÒÔ¶ÔÆäË÷ÒýÖµµÄ½µÐòÅÅÁÐÀ´¼ì²éË÷ÒýÈë¿Ú¡£ÔÚ±»·Ö¸îµÄË÷ÒýÖУ¬Æä½á¹ûΪ¶Ôÿ¸ö²¿·ÖÄÚ²¿µÄ½µÐòÅÅÁС£


Syntax: /*+ INDEX_SS_DESC (tablespecindexspec) */


cpu_costing

´ËhintΪSQLÓï¾ä´ò¿ªCPU costing¡£ÕâÊǶÔÓÅ»¯Æ÷µÄĬÈÏÆÀ¹Àģʽ¡£ÓÅ»¯Æ÷ÆÀ¹Àµ±Ö´Ðиø¶¨²éѯʱ£¬Êý¾Ý¿âÐèÒªÔËÐеÄIO²Ù×÷Êý¡¢IO²Ù×÷ÖÖÀà¡¢ÒÔ¼°CPUÖÜÆÚÊý¡£


Syntax: /*+ CPU_COSTING (tablespecindexspec) */


no_cpu_costing

´ËhintΪSQLÓï¾ä¹Ø±ÕCPU costing¡£È»ºóCBOʹÓÃIO costģʽ£¬´ËģʽºöÂÔCPU»¨·Ñ£¬½ö²âÁ¿ÔÚsingle-block readsÖеÄËùÓÐÖ¸±ê¡£


Syntax: /*+ NO_CPU_COSTING */


Ëæ×ÅOracleÓÅ»¯Æ÷Ô½À´Ô½³ÉÊ죬Oracleר¼Ò±ØÐë²»¶ÏÔö¼Ó×Ô¼º¶Ôµ÷ÕûSQLÓï¾äµÄ¹¤¾ß´¢±¸¡£µ±È»£¬ÌÖÂÛËùÓи´ÔÓµÄOracle10g SQLÐÂhintsÔ¶Ô¶³¬³öÁ˱¾Îĵķ¶Î§£¬Äã¿ÉÒÔ´ÓMike AultµÄÐÂÊéOracle Database 10g New FeaturesÖлñµÃ¹ØÓÚOracle10gµÄ¸ü¶àÐÅÏ¢¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ