¡¡¡¡OracleÌṩÁ˶àÖÖ·½·¨ÓÃÓÚ¼õÉÙ»¨ÔÚÆÊÎöOracle SQL±í´ïʽÉϵÄʱ¼ä£¬ÔÚÖ´ÐдøÓдóÁ¿Ö´Ðмƻ®µÄ¸´ÔÓ²éѯʱÆÊÎö¹ý³Ì»áÍÏÀÛϵͳµÄÐÔÄÜ¡£ÏÖÔÚÎÒÃÇÀ´¼òÒªµØ¿´¿´ÕâЩ·½·¨Öеļ¸ÖÖ¡£
¡¡¡¡Ê¹ÓÃorderedÌáʾ
¡¡¡¡Oracle±ØÐ뻨·Ñ´óÁ¿µÄʱ¼äÀ´ÆÊÎö¶à±í¸ñµÄºÏ²¢£¬ÓÃÒÔÈ·¶¨±í¸ñºÏ²¢µÄ×î¼Ñ˳Ðò¡£Èç¹ûSQL±í´ïʽÉæ¼°Æ߸öÄËÖÁ¸ü¶àµÄ±í¸ñºÏ²¢£¬ÄÇôÓÐʱ¾Í»áÐèÒª³¬¹ý30·ÖÖÓµÄʱ¼äÀ´ÆÊÎö£¬ÒòΪOracle±ØÐëÆÀ¹À±í¸ñºÏ²¢ËùÓпÉÄܵÄ˳Ðò¡£°Ë¸ö±í¸ñ¾Í»áÓÐ40,000¶àÖÖ˳Ðò¡£OrderedÕâ¸öÌáʾ£¨hint£©ºÍÆäËûµÄÌáʾһÆðʹÓÃÄܹ»²úÉúºÏÊʵĺϲ¢Ë³Ðò¡£
¡¡¡¡OrderedÕâ¸öÌáʾ»áÒªÇóÁÐÔÚSQL±í´ïʽFROM×Ö¾äÀïµÄ±í¸ñ°´ÕÕÖ¸¶¨µÄ˳Ðò½øÐкϲ¢£¬FROM×Ö¾äÀïµÄµÚÒ»¸ö±í¸ñ»áÖ¸¶¨Çý¶¯±í¸ñ£¨driving table£©¡£Çý¶¯±í¸ñÓ¦¸ÃÊÇ·µ»Ø×îСÐÐÊýµÄ±í¸ñ¡£Ê¹ÓÃorderedÌáʾ»áÌø¹ý·Ç³£ºÄʱºÍºÄ×ÊÔ´µÄÆÊÎö²Ù×÷£¬²¢¼Ó¿ìOracle SQLµÄÖ´ÐС£
¡¡¡¡Listing AÈçÏ£º
¡¡¡¡Listing A
¡¡¡¡select /*+ ordered use_nl(bonus)
parallel(e, 4) */ e.ename, hiredate, b.comm from emp e, bonus b
where e.ename = b.ename ;
¡¡
¡¡¡¡Listing AÀïÊÇÒ»¸ö¸´ÔÓ²éѯµÄÀý×Ó£¬Õâ¸ö²éѯ±»Ç¿ÖƽøÐÐÒ»¸öǶÌ×Ñ»·£¬´Ó¶øÓë¶Ôemp±í¸ñ½øÐеIJ¢ÐвéѯºÏ²¢¡£Òª×¢Ò⣬ÎÒÒѾʹÓÃorderedÌáʾÀ´Òýµ¼OracleÈ¥°´ÕÕWHERE×Ó¾äËùÁгöµÄ˳ÐòÀ´ÆÀ¹À±í¸ñ¡£
¡¡¡¡Ê¹ÓÃtheordered_predicates
¡¡¡¡ordered_predicatesÌáʾÔÚ²éѯµÄWHERE×Ó¾äÀïÖ¸¶¨µÄ£¬²¢±»ÓÃÀ´Ö¸¶¨²¼¶ûÅжϣ¨Boolean predicate£©±»ÆÀ¹ÀµÄ˳Ðò¡£ÔÚûÓÐordered_predicatesµÄÇé¿öÏ£¬Oracle»áʹÓÃÏÂÃæÕâЩ²½ÖèÀ´ÆÀ¹ÀSQLÅжϵÄ˳Ðò£º
¡¡¡¡×Ó²éѯµÄÆÀ¹ÀÏÈÓÚÍâ²ãWHERE×Ó¾äÀïµÄBooleanÌõ¼þ¡£
¡¡¡¡ËùÓÐûÓÐÄÚÖú¯Êý»òÕß×Ó²éѯµÄ²¼¶ûÌõ¼þ¶¼°´ÕÕÆäÔÚWHERE×Ó¾äÀïÏà·´µÄ˳Ðò½øÐÐÆÀ¹À£¬¼´×îºóÒ»ÌõÅжÏ×îÏȱ»ÆÀ¹À¡£
¡¡¡¡Ã¿¸öÅж϶¼´øÓÐÄÚÖú¯ÊýµÄ²¼¶ûÅж϶¼ÒÀ¾ÝÆäÔ¤¼ÆµÄÆÀ¹ÀÖµ°´µÝÔöÅÅÁС£
¡¡¡¡Äã¿ÉÒÔʹÓÃordered_predicatesÌáʾÀ´Ç¿ÖÆÈ¡´úÕâЩȱʡµÄÆÀ¹À¹æÔò£¬ÄÇôÄãWHERE×Ó¾äÀïµÄÏîÄ¿¾Í»á°´ÕÕÆäÔÚ²éѯÀï³öÏÖµÄ˳Ðò±»ÆÀ¹À¡£ÔÚ²éѯµÄWHERE×Ó¾äÀïʹÓÃÁËPL/SQLº¯ÊýµÄÇé¿öÏ£¬Í¨³£»áʹÓÃordered_predicatesÌáʾ¡£Èç¹ûÄãÖªµÀÏÞÖÆ×î¶àµÄÅжϲ¢ÇÒÏ£ÍûOracle×îÏÈÆÀ¹ÀÕâЩÅжϵÄʱºò£¬ÔÚÕâÖÖÇé¿öÏ£¬ËüÒ²ÊǷdz£ÓÐÓõġ£Ó÷¨Ìáʾ£ºÄã²»ÄÜʹÓÃordered_predicatesÌáʾÀ´±£´æ¶ÔË÷Òý¼ü½øÐÐÅжÏÆÀ¹ÀµÄ˳Ðò¡£
¡¡¡¡ÏÞÖƱí¸ñºÏ²¢ÆÀ¹ÀµÄÊýÁ¿
¡¡¡¡Ìá¸ßSQLÆÊÎöÐÔÄܵÄ×îºóÒ»ÖÖ·½·¨ÊÇÇ¿ÖÆÈ¡´úOracleµÄÒ»¸ö²ÎÊý£¬Õâ¸ö²ÎÊý¿ØÖÆ×ÅÔÚÆÀ¹ÀÒ»¸ö²éѯµÄʱºò£¬»ùÓÚÏûºÄµÄÓÅ»¯Æ÷ËùÆÀ¹ÀµÄ¿ÉÄܺϲ¢ÊýÁ¿¡£optimizer_search_limitÕâ¸ö²ÎÊý»áÖ¸¶¨±í¸ñºÏ²¢×éºÏµÄ×î´óÊýÁ¿£¬ºóÕß½«»áÔÚOracleÊÔͼȷ¶¨ºÏ²¢¶à±í¸ñ×î¼Ñ·½Ê½µÄʱºò±»ÆÀ¹À¡£Õâ¸ö²ÎÊýÓÐÖúÓÚ·ÀÖ¹ÓÅ»¯Æ÷»¨¸ü¶àµÄʱ¼äÀ´ÆÀ¹À¿ÉÄܵĺϲ¢Ë³Ðò£¬¶ø²»ÊÇ°Ñʱ¼ä»¨ÔÚÑ°ÕÒ×î¼ÑºÏ²¢Ë³ÐòÉÏ¡£optimizer_search_limit»¹¿ØÖÆ×ÅÓÃÓÚµ÷ÓÃstar joinÌáʾµÄãÚÖµ£¬µ±²éѯÀïµÄ±í¸ñÊýÁ¿µÍÓÚoptimizer_search_limit£¨ÆäȱʡµÄÖµÊÇ5£©µÄʱºò£¬starÌáʾ¾Í»á±»¹â¹Ë¡£
¡¡¡¡ÒÔÉÏÖ»ÊÇһЩOracle DBAÓÃÀ´ÓÅ»¯OracleÊý¾Ý¿âÓ¦ÓóÌÐòSQL²éѯµÄÐÔÄܵÄһЩС¼¼ÇÉ¡£