Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎÔÚ DB2 ´æ´¢¹ý³ÌÖÐʹÓÃÓÅ»¯ÅäÖÃÎļþ
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-16
  2789  次浏览      27
 

¼ò½é

´ó¶àÊýÖ÷ÒªµÄ¹ØÏµÐÍÊý¾Ý¿â¹ÜÀíϵͳ£¬°üÀ¨ DB2 for Linux, UNIX, and Windows£¬ÒÀÀµÓÚÒ»ÖÖ»ùÓڳɱ¾µÄÓÅ»¯Æ÷Éè¼Æ¡£¸ÃÓÅ»¯Æ÷»ùÓÚһЩÌõ¼þÀ´ÆÀ¹À³É±¾£¬°üÀ¨ CPU ²¢ÐÐÐÔºÍËÙ¶È¡¢I/O ´æ´¢ÌØÕ÷ºÍͨÐÅ´ø¿íµÈÍⲿÌõ¼þ£¬ÒÔ¼° DB2 ×¢²á±í±äÁ¿¡¢DB2 ÓÅ»¯¼¶±ð¡¢Í³¼ÆÐÅÏ¢µÈÄÚ²¿Ìõ¼þ¡£¶øÇÒ£¬ÔÚϵͳÔËÐÐʱÆÚ¼ä£¬ÕâЩÌõ¼þÖÐÐí¶à¶¼ÔÚ²»¶Ï±ä»¯£¬ËùÒÔÑ¡Ôñ×î¼ÑÖ´Ðмƻ®µÄ¹ý³Ì¶ÔÈκÎÊý¾Ý¿âϵͳ¶øÑÔ¶¼ÊÇÒ»¸ö·Ç³£¸´ÔӵĹý³Ì¡£DB2 ÓÅ»¯ÅäÖÃÎļþÊǶÔÓÅ»¯Æ÷µÄÖØÒª²¹³ä¡£¶ÔÓÚÔÚʵÏÖÁËÆäËûµ÷½Úʵ¼ùÖ®ºó²»Âú×ãÐÔÄÜÐèÇóµÄ SQL Óï¾ä£¬¿ÉÒÔʹÓô˹¦ÄÜÐÞ¸ÄĬÈÏÖ´Ðмƻ®¡£Ëü¶ÔÓ¦ÓóÌÐòµ÷ÊÔºÍ SQL Óï¾äÐÔÄÜÓÅ»¯×îÓÐÓá£

´æ´¢¹ý³ÌÊÇÊý¾Ý¿âϵͳµÄÁíÒ»¸öÓÐÓõŦÄÜ¡£Ê¹Óô洢¹ý³Ì£¬Êý¾Ý¿â¿ÉʵÏÖ´æÔÚÓڸ߼¶±à³ÌÓïÑÔÖеŦÄÜ£¬±ÈÈç±äÁ¿¶¨Òå¡¢Ìõ¼þÉùÃ÷¡¢¿ØÖÆÓï¾äµÈ¡£DB2 ÖеĴ洢¹ý³ÌÊÇʹÓà DB2 SQL ¹ý³ÌÓïÑÔ (SQL PL) ±àдµÄ¡£SQL PL ÊÇ SQL ³Ö¾Ã´æ´¢Ä£¿éÓïÑÔ±ê×¼µÄÒ»¸ö×Ó¼¯¡£ÕâÏî±ê×¼½«Í¨¹ý SQL ·ÃÎÊÊý¾ÝµÄ·½±ãÐÔÓë±à³ÌÓïÑÔµÄÁ÷¿ØÖƹ¦ÄÜÏà½áºÏ¡£

´æ´¢¹ý³ÌÖÐµÄ SQL Óï¾ä³£³£¾ßÓиü¸´ÔÓµÄÂß¼­²¢Çҷdz£ÄÑÒÔµ÷ÊÔ»òµ÷½Ú£¬ÔÚһЩÇé¿öÏ£¬DB2 Ñ¡ÔñµÄ·ÃÎʼƻ®²¢²»ÊÇÄúÏëÒªµÄ£¬ÓÈÆäÊÇÔÚÓ¦ÓóÌÐòµ÷ÊÔÇéÐÎÏ¡£ÔÚʹÓÃËùÓÐ×î¼Ñʵ¼ùºó£¬Èç¹ûÄúÈÔÈ»ÎÞ·¨´Ó´æ´¢¹ý³Ì»ñµÃÏëÒªµÄÐÔÄÜ£¬¿ÉÒÔʹÓÃÓÅ»¯ÅäÖÃÎļþÀ´Ìṩ°ïÖú¡£´æ´¢¹ý³ÌÖÐµÄ SQL Óï¾ä¿ÉÄÜÓëÆäËûµØ·½µÄ SQL Óï¾äÉÔ΢²»Í¬£¬ÒòΪËüÃdz£³£°üº¬Ò»Ð©ÊäÈ루Êä³ö£©±äÁ¿¡£µ±ÄúÏ£Íû¶ÔÕâЩÀàÐ͵ÄÓï¾äʹÓÃÓÅ»¯ÅäÖÃÎļþʱ£¬ÄúÐèÒª²ÉȡһЩ¶îÍâµÄ²½Öè²ÅÄܵõ½ÏëÒªµÄ½á¹û¡£±¾ÎĽ«Í¨¹ýÒ»¸öʾÀý£¬½éÉÜÈçºÎʹÓÃÓÅ»¯ÅäÖÃÎļþÐ޸Ĵ洢¹ý³ÌÖÐµÄ SQL Óï¾äµÄÖ´Ðмƻ®¡£

ÓÅ»¯ÅäÖÃÎļþ¼ò½é

ÓÅ»¯ÅäÖÃÎļþÊÇÒ»¸ö XML Îĵµ£¬ÆäÖаüº¬Õë¶ÔÒ»¸ö»ò¶à¸öÊý¾Ý²Ù×÷ÓïÑÔ (DML) Óï¾äµÄÓÅ»¯Ö¸ÄÏ¡£ÓÅ»¯ÅäÖÃÎļþ¿É°üº¬È«¾ÖÖ¸ÄÏ£¬ËüÃÇÊÊÓÃÓÚÔÚÅäÖÃÎļþÉúЧʱִÐеÄËùÓÐ DML Óï¾ä£¬ÓÅ»¯ÅäÖÃÎļþ»¹¿É°üº¬ÊÊÓÃÓÚÒ»¸ö°üÖи÷¸ö DML Óï¾äµÄÌØ¶¨Ö¸ÄÏ¡£ÓÅ»¯ÅäÖÃÎļþ¿ÉÓÃÓÚÐÞ¸Ä SQL Óï¾äµÄ·ÃÎʼƻ®£¬µ«Õâ²¢²»Òâζ×ÅÄú¿ÉÒÔÈÎÒâΪһ¸öÓï¾äÖ¸¶¨·ÃÎʼƻ®¡£

ÄúÓ¦¸ÃÌØ±ð¹Ø×¢ÒÔÏÂÁ½¸öÎÊÌâ¡£

ÓÅ»¯ÀàÓÅÏÈÓÚÓÅ»¯ÅäÖÃÎļþ¡£Ò²¾ÍÊÇ˵£¬ÓÅ»¯Æ÷Ö»ÓÐÔÚÖ¸ÄÏ·ûºÏµ±Ç°ÓÅ»¯ÀàµÄ¹æÔòʱ£¬²ÅʹÓÃÕâЩָÄÏ¡£ÀýÈ磬Äú²»ÄÜÔÚÓÅ»¯¼¶±ð 0 ÉÏʹÓúϲ¢Á¬½Ó (merge join) »ò¹þÏ£Á¬½Ó (Hash-Join)¡£

Ö»ÓÐÔÚÓÅ»¯Ö¸ÄÏÊÇÓÅ»¯Æ÷ÆÀ¹ÀµÄÒ»Ïî¼Æ»®Ê±£¬²Å»áÌôÑ¡Ëü¡£Èç¹û³öÓÚijÖÖÔ­Òò£¬ÓÅ»¯Æ÷ûÓÐÆÀ¹ÀÓÅ»¯ÅäÖÃÎļþÖÐÖ¸¶¨µÄ¼Æ»®£¬Ëü½«²»»áʹÓøüƻ®¡£

ÓÅ»¯ÅäÖÃÎļþµÄ»ù±¾¸ñʽÈçÇåµ¥ 1 Ëùʾ¡£

Çåµ¥ 1. ÓÅ»¯ÅäÖÃÎļþµÄʾÀý

<?xml version="1.0" encoding="UTF-8"?>
<OPTPROFILE VERSION="9.1.0.0">
<!-- Global optimization guidelines section. Optional but at most one. -->
<OPTGUIDELINES>
Here is for the global guidelines
</OPTGUIDELINES>

<!-- Statement profile section. Zero or more. -->
<STMTPROFILE ID="profile id">
<STMTKEY>
Here is for the statement that we want to apply this statement level
optimization guidelines to
</STMTKEY>
<OPTGUIDELINES>
Here is for the optimization guidelines for the statement defined in the
<STMTKEY> element
</OPTGUIDELINES>
</STMTPROFILE>
</OPTPROFILE>

OPTPROFILE

ÓÅ»¯ÅäÖÃÎļþ´Ó OPTPROFILE ÔªËØ¿ªÊ¼¡£´ËÔªËØ°üº¬Ò»¸öÃûΪ VERSION µÄÊôÐÔ£¬ËüÖ¸¶¨±¾ÎļþÒª×ñÊØµÄ XML ģʽ°æ±¾¡£Ò»¸öÓÅ»¯ÅäÖÃÎļþ±ØÐë°üº¬ÇÒ½öÄܰüº¬Ò»¸ö OPTPROFILE ÔªËØ¡£

È«¾ÖÓÅ»¯Ö¸ÄÏ

Ò»¸öÓÅ»¯ÅäÖÃÎļþ¿ÉÓµÓÐ×î¶à 1 ¸öÈ«¾ÖÓÅ»¯Ö¸ÄϽڡ£ÔÚÓÅ»¯ÅäÖÃÎļþÉúЧʱ£¬Ëü½«Ó¦ÓÃÓÚËùÖ´ÐеÄËùÓÐÓï¾ä¡£È«¾ÖÓÅ»¯Ö¸ÄÏÔÚ OPTGUIDELINES ÔªËØÖж¨Òå¡£ÀýÈ磬Äú¿ÉÒÔÖ¸¶¨Ê¹ÓÃÄĸö MQT¡¢ÓÅ»¯¼¶±ð¡¢²éѯµÄ²¢·¢³Ì¶È£¬µÈµÈ¡£

Óï¾äÅäÖÃÎļþ½Ú

Ò»¸öÓÅ»¯ÅäÖÃÎļþ¿É°üº¬ 0 ¸ö»ò¶à¸öÓï¾äÅäÖÃÎļþ½Ú¡£ÔÚÓÅ»¯ÎļþÉúЧʱ£¬Ëü½«½öÓ¦Óõ½×¼È·Æ¥ÅäµÄ SQL Óï¾ä¡£Óï¾äÓÅ»¯Ö¸ÄÏÔÚ STMTPROFILE ÔªËØÖж¨Òå¡£Ëü°üº¬Ò»¸ö STMTKEY ÔªËØºÍÒ»¸ö OPTGUIDELINES ÔªËØ¡£

STMTKEY ÔªËØ¶¨ÒåÓï¾äÓÅ»¯Ö¸ÄϽ«Ó¦Óõ½µÄ SQL Óï¾ä¡£DB2 ʹÓà STMTKEY ÔªËØÖж¨ÒåµÄÄÚÈÝÀ´Æ¥Åä SQL Óï¾ä¡£Èç¹ûÆ¥Åä³É¹¦£¬Óë´Ë STMTKEY Ïà¹ØµÄÓÅ»¯Ö¸ÄϽ«Ó¦Óõ½´Ë SQL Óï¾ä¡£ÔÚ STMTKEY ÔªËØÄÚ¶¨ÒåµÄÓï¾ä±ØÐëÓëÒªÓ°Ïìµ½Æä·ÃÎʼƻ®µÄÓï¾ä׼ȷƥÅ䣬ÕâÖÖÆ¥ÅäÊÇÇø·Ö´óСдµÄ¡£ËüÔÊÐí¶àÓàµÄ¿Õ¸ñºÍ¿ØÖÆ×Ö·û£¬±ÈÈç»»ÐÐ×Ö·û¡£µ«ÊÇ£¬Ëü²»ÔÊÐíʹÓÃͨÅä·ûÀ´Æ¥ÅäÓï¾ä×顣ÿ¸öÐèÒªÊܵ½Ó°ÏìµÄÓï¾äÖ»Ó¦ÓÐÒ»¸ö¶ÀÁ¢µÄ STMTPROFILE ½Ú¡£Èç¹ûÓжàÓÚÒ»¸öÓëÖ´ÐÐÓï¾äÆ¥ÅäµÄ STMTPROFILE£¬ÎÒÃǽ«½öÑ¡Ôñ²¢Ó¦ÓõÚÒ»¸ö¡£

ÔÚ OPTGUIDELINES ÔªËØÄÚ£¬Äú¿ÉÒÔÖ¸¶¨ DB2 ¶Ôij¸ö±íµÄ·ÃÎÊ·½·¨£¨±íɨÃè»òË÷ÒýɨÃ裩£¬ÐÞ¸ÄҪʹÓõÄÁ¬½Ó²Ù×÷ºÍÁ¬½Ó·½·¨µÄ˳Ðò£¬Ö¸¶¨²éÑ¯ÖØÐ´¹æÔò£¬µÈµÈ¡£µ±Ö´ÐÐµÄ SQL Óï¾äÓë STMTKEY ÔªËØÖеÄÄÚÈÝ׼ȷƥÅäʱ£¬Ïà¹Ø OPTGUIDELINES ÔªËØÖеÄËùÓÐÓÅ»¯Ö¸ÄϽ«Ó¦ÓÃÓÚ´Ë SQL Óï¾äµÄ·ÃÎʼƻ®µÄ´´½¨¡£

Ð޸Ĵ洢¹ý³ÌÖÐµÄ SQL Óï¾ä·ÃÎʼƻ®

ÔÚÒ»¸ö´æ´¢¹ý³ÌÄÚʹÓÃµÄ SQL Óï¾ä¿ÉÄܾßÓÐÌØÊâµÄÐÎʽ¡£ÀýÈ磬ËüÃdz£³£°üº¬Ò»Ð©ÊäÈ루Êä³ö£©±äÁ¿¡£ÕâÖÖ SQL Óï¾ä¿ÉÖ±½Ó¹© STMTKEY ÔªËØÊ¹Óᣵ± DB2 ±àÒëÕâЩÓï¾äʱ£¬Ëü½«ÕâЩ±äÁ¿Ì滻ΪÄÚ²¿ÐÎʽ£¬È»ºóʹÓôËÄÚ²¿ÐÎʽ×÷Ϊ×îÖÕ°æ±¾¡£Èç¹ûʹÓÃ×î³õµÄ SQL Óï¾ä×÷Ϊ STMTKEY£¬µ± DB2 ʹÓÃÄÚ²¿ÐÎʽ½øÐÐÆ¥Åäʱ£¬²»»á³É¹¦¡£ËùÒÔ£¬ÄúÐèÒªÊ×ÏÈÕÒµ½ÕâЩ SQL Óï¾äµÄÄÚ²¿ÐÎʽ£¬È»ºóʹÓÃËüÃÇ×÷Ϊ STMTKEY À´´´½¨ÓÅ»¯ÅäÖÃÎļþ¡£ÒÔϸ÷½Ú½«½éÉÜËùÐèµÄ²½Öè¡£

²âÊÔ»·¾³

ÎÒÃÇΪ±¾ÎÄÖеIJâÊÔºÍʾÀýʹÓÃÒÔÏ»·¾³¡£

²Ù×÷ϵͳ£ºAIX 6.1

DB2 for Linux, UNIX, and Windows Version 9.7

Êý¾Ý¿â£ºSAMPLE Êý¾Ý¿â

±¾ÎÄÖеÄËùÓÐʾÀý¶¼»ùÓÚÔÚ AIX 6.1 ²Ù×÷ϵͳÉÏÔËÐÐµÄ DB2 V9.7¡£¶ÔÓÚÆäËû²Ù×÷ϵͳ£¬ÊµÏÖÓ¦¸ÃÏàͬ¡£

×¼±¸²âÊÔÊý¾Ý¿â

Èçͼ 1 Ëùʾ£¬SAMPLE Êý¾Ý¿âÊÇ DB2 ÌṩµÄÒ»¸öСÐÍÊý¾Ý¿â¡£Èç¹ûÔÚ°²×°ÆÚ¼äδ°²×°Ëü£¬Äú¿ÉÒÔÕÒµ½µ±Ç°ÊµÀýµÄ sqllib/bin Ŀ¼£¬ÔËÐÐ db2sampl ÃüÁîÀ´×Ô¶¯´´½¨Ëü¡£

ͼ 1. ´´½¨²âÊÔÊý¾Ý¿â

´´½¨ËµÃ÷±í (Explain table)

ÄúÐèҪʹÓà DB2 Explain ¹¤¾ß²é¿´ÓÅ»¯Ö¸ÄÏÊÇ·ñÒÑÑ¡Ôñ£¬SQL Óï¾äµÄ·ÃÎʼƻ®ÊÇ·ñÒÑÐ޸ġ£Explain ¹¤¾ßµÄÊä³ö½«ÏÔʾÓÅ»¯ÅäÖÃÎļþµÄÃû³ÆºÍʹÓõÄÓÐЧָÄÏ¡£Òò´Ë£¬ÄúÐèÒª´´½¨ Explain ¹¤¾ßËùÐèµÄ±í¡£ÔÚĬÈÏÇé¿öÏ£¬DB2 ²»»á´´½¨ÕâЩ±í¡£

ÈçÇåµ¥ 2 Ëùʾ£¬´Óµ±Ç°ÊµÀýËùÓÐÕßµÄ sqllib/misc Ŀ¼£¬Ö´ÐÐÎļþ EXPLAIN.DDL À´Íê³ÉËùÓÐ Explain ±íµÄ´´½¨¹¤×÷¡£

Çåµ¥ 2. ´´½¨ Explain ±íµÄ½Å±¾

db2 connect sample
db2 -tvf EXPLAIN.DDL
db2 connect reset

ÔËÐÐÇ°ÃæµÄÃüÁîºó£¬ÖØÐÂÁ¬½ÓÊý¾Ý¿â²¢ÔËÐÐ db2 list tables¡£Äú¿ÉÒÔÔÚϵͳĿ¼Öп´µ½ËùÓоßÓÐ EXPLAIN ǰ׺µÄд´½¨µÄ±í£¬Èçͼ 2 Ëùʾ¡£ËùÓÐÕâЩ±íÓÉ Explain ¹¤¾ßÓÃÓÚ´æ´¢ÐÅÏ¢¡£

ͼ 2. д´½¨µÄ Explain ±í

´´½¨ SYSTOOLS.OPT_PROFILE ±í

ÈçÇåµ¥ 3 Ëùʾ£¬Äú¶¨ÒåµÄËùÓÐÓÅ»¯ÅäÖÃÎļþ½«´æ´¢ÔÚģʽ SYSTOOLS Ï嵀 OPT_PROFILE ±íÖС£Ä¬ÈÏÇé¿öÏ£¬DB2 ²»»á´´½¨´Ë±í¡£Èç¹ûÄúÏ£ÍûʹÓÃÓÅ»¯ÅäÖÃÎļþÀ´ÐÞ¸Ä SQL Óï¾äµÄ·ÃÎʼƻ®£¬ÄúÐèÒª×ÔÐд´½¨Ëü¡£

Çåµ¥ 3. ´´½¨ SYSTOOLS.OPT_PROFILE ±íµÄ SQL

CREATE TABLE SYSTOOLS.OPT_PROFILE (
SCHEMA VARCHAR(128) NOT NULL,
NAME VARCHAR(128) NOT NULL,
PROFILE BLOB (2M) NOT NULL,
PRIMARY KEY ( SCHEMA, NAME ) );

´Ë±íÖаüº¬ÒÔÏ 3 ÁС£

ÁÐ SCHEMA Ö¸ÓÅ»¯ÅäÖÃÎļþµÄģʽÃû³Æ¡£

ÁÐ NAME Ö¸ÓÅ»¯ÅäÖÃÎļþµÄÃû³Æ¡£

ÁÐ PROFILE ´æ´¢ÓÅ»¯ÅäÖÃÎļþµÄÄÚÈÝ¡£

SCHEMA.NAME ¿ÉÓÃÓÚΩһ±êʶÊý¾Ý¿âÖеÄÒ»¸öÓÅ»¯ÅäÖÃÎļþ¡£ÈçÇåµ¥ 4 ÖÐËùʾ£¬½«Ö®Ç°µÄ½Å±¾±£´æµ½Îļþ SYSTOOLS.OPT_PROFILE.DDL Öв¢ÖØÐÂÁ¬½ÓÊý¾Ý¿â¡£

Çåµ¥ 4. ´´½¨ SYSTOOLS.OPT_PROFILE ±íµÄ½Å±¾

db2 connect to sample
db2 -tvf SYSTOOLS.OPT_PROFILE.DDL
db2 connect reset

ÔËÐнű¾ºó£¬Äú½«Íê³É´Ë±íµÄ´´½¨¹¤×÷£¬Èçͼ 3 Ëùʾ¡£

ͼ 3. ´´½¨ SYSTOOLS.OPT_PROFILE ±í

´´½¨´æ´¢¹ý³Ì

¹ØÓÚ´æ´¢¹ý³ÌµÄÏêϸÓï·¨£¬Äú¿ÉÒÔ²ÎÔÄ IBM DB2 9.7 ÐÅÏ¢ÖÐÐÄÖÐµÄ ¡°´æ´¢¹ý³Ì¡± Ò»½Ú£¬Çë²ÎÔÄ ²Î¿¼×ÊÁÏ Ò»½Ú¡£ÈçÇåµ¥ 5 Ëùʾ£¬Äú½«´´½¨Ò»¸öÃûΪ GET_EMP_NUM µÄ¼òµ¥´æ´¢¹ý³ÌÀ´Íê³ÉËùÓÐʾÀý¡£´Ë´æ´¢¹ý³ÌʹÓÃÑùÀýÊý¾Ý¿âÖÐµÄ DEPARTMENT ±íºÍ EMPLOYEE ±í¡£ËüÓÐÁ½¸ö²ÎÊý£¬Ò»¸öÃûΪ DEPT_NO£¨²¿ÃÅ ID£©µÄÊäÈë²ÎÊýºÍÒ»¸öÃûΪ EMP_NUM£¨´Ë²¿ÃÅÖеÄÔ±¹¤Êý£©µÄÊä³ö²ÎÊý¡£´Ë´æ´¢¹ý³ÌµÄ¹¦ÄÜÊÇ»ùÓÚÓû§ÊäÈëµÄ²¿ÃÅ ID£¬¼ÆËãÒ»¸ö²¿ÃÅÖеÄÔ±¹¤Êý¡£

Çåµ¥ 5. ¶¨Òå´æ´¢¹ý³ÌµÄ½Å±¾

CONNECT TO SAMPLE%

CALL SYSPROC.SET_ROUTINE_OPTS('EXPLAIN ALL')%

CREATE PROCEDURE GET_EMP_NUM(
IN DEPT_NO CHAR(50),
OUT EMP_NUM INTEGER)

LANGUAGE SQL

BEGIN

SELECT COUNT(*) INTO EMP_NUM
FROM DEPARTMENT, EMPLOYEE
WHERE DEPARTMENT.DEPTNO = EMPLOYEE.WORKDEPT
AND DEPARTMENT.DEPTNAME = DEPT_NO;

END%

CONNECT RESET%

µ÷Óà SYSPROC.SET_ROUTINE_OPTS ´æ´¢¹ý³ÌÀ´ÉèÖÃÔ¤±àÒëºÍ°ó¶¨Ñ¡ÏȻºóÔÙ¶¨Òå GET_EMP_NUM ´æ´¢¹ý³Ì¡£ÄúÒ²¿ÉÒÔÐÞ¸Ä DB2_SQLROUTINE_PREPOPTS ×¢²á±í±äÁ¿À´ÊµÏÖÏàͬ¹¦ÄÜ¡£Èç¹ûµ÷Óà SYSPROC.SET_ROUTINE_OPTS ´æ´¢¹ý³Ì£¬Ëü½«¸²¸Ç´Ë×¢²á±í±äÁ¿µÄÖµ¡£ÔÚÕâÀォ²ÎÊý EXPLAIN ALL µÄÖµ´«µÝ¸ø SYSPROC.SET_ROUTINE_OPT ´æ´¢¹ý³Ì¡£Ëü±íÃ÷ÔÚ´´½¨´æ´¢¹ý³ÌÆÚ¼ä£¬ÆäÖеÄËùÓÐ SQL Óï¾äµÄ·ÃÎʼƻ®½«±£´æÔÚ Explain ±íÖС£

½«Ö®Ç°µÄ½Å±¾±£´æµ½Îļþ create_procedure.ddl ÖУ¬ÈçÇåµ¥ 6 Ëùʾ£¬È»ºóÔËÐÐͼ 4 ÖÐËùʾµÄÃüÁîÀ´Íê³É´æ´¢¹ý³ÌµÄ´´½¨¹¤×÷¡£Çë×¢Ò⣬ÄúÓ¦¸ÃÊ×ÏÈÔÚÕâÁ½¸ö±íÉÏÖ´ÐÐ RUNSTATS£¬È»ºóÔÙ´´½¨´æ´¢¹ý³Ì£¬ÒÔ±ã DB2 ½«Ê¹ÓÃ×îеÄͳ¼ÆÐÅÏ¢À´Éú³É¸üÓÐЧµÄ·ÃÎʼƻ®¡£

Çåµ¥ 6. ´´½¨´æ´¢¹ý³ÌµÄ½Å±¾

db2 connect to sample
db2 'runstats on table db2inst1.department and indexes all'
db2 'runstats on table db2inst1.employee and indexes all'
db2 connect to reset
db2 -td% -vf create_procedure.ddl

ͼ 4. ´´½¨ GET_EMP_NUM ´æ´¢¹ý³Ì

²é¿´ÔÚ´æ´¢¹ý³ÌÖж¨Òå SQL Óï¾äµÄÄÚ²¿ÐÎʽ

¶ÔÓÚÔÚ´æ´¢¹ý³ÌÖж¨ÒåµÄÕâЩ SQL Óï¾ä£¬DB2 ½«ÊäÈ루Êä³ö£©±äÁ¿Ì滻ΪËüµÄÄÚ²¿ÐÎʽ¡£Äú¿ÉʹÓÃÇåµ¥ 7 ÖÐËùʾµÄ SQL Óï¾ä²é¿´ÕâЩÓï¾äµÄÄÚ²¿ÐÎʽ¡£

Çåµ¥ 7. ²é¿´ÔÚ´æ´¢¹ý³ÌÖж¨ÒåµÄ SQL Óï¾äµÄÄÚ²¿ÐÎʽµÄ SQL

SELECT PKGNAME,  S.TEXT
FROM SYSCAT.STATEMENTS AS S,
SYSCAT.ROUTINEDEP AS D,
SYSCAT.ROUTINES AS R
WHERE PKGSCHEMA = BSCHEMA
AND PKGNAME = BNAME
AND BTYPE = 'K'
AND R.SPECIFICNAME = D.SPECIFICNAME
AND R.ROUTINESCHEMA = D.ROUTINESCHEMA
AND R.ROUTINENAME = 'GET_EMP_NUM'
AND R.ROUTINESCHEMA = 'DB2INST1'
ORDER BY STMTNO;

ÄúÓ¦¸Ã½« R.ROUTINESCHEMA µÄÖµÌæ»»ÎªÄúʹÓõĴ洢¹ý³ÌµÄģʽÃû£¨ÔÚ±¾ÀýÖÐΪ DB2INST1£©£¬²¢½« R.ROUTINENAME µÄÖµÌæ»»Îª´æ´¢¹ý³ÌµÄÃû³Æ£¨ÔÚ±¾ÀýÖÐΪ GET_EMP_NUM£©¡£ÔÚÕâÖ®ºó£¬½«½Å±¾±£´æµ½Îļþ get_routine_sqls.sql ÖУ¬Á¬½ÓÊý¾Ý¿âÀ´Ö´Ðиýű¾£¬ÈçÇåµ¥ 8 Ëùʾ¡£

Çåµ¥ 8. ²é¿´´æ´¢¹ý³ÌÖж¨ÒåµÄ SQL Óï¾äµÄÄÚ²¿ÐÎʽµÄ½Å±¾

db2 connect to sample
db2 -tvf get_routine_sqls.sql
db2 connect reset

ÉÏÊö SQL Óï¾äµÄÊä³ö°üº¬Á½ÁС£Ò»ÁÐÊÇÓë´æ´¢¹ý³ÌÏà¹ØµÄ°üÃû³Æ£¬ÁíÒ»ÁÐÊÇ SQL Óï¾äµÄÄÚ²¿ÐÎʽ¡£ÔËÐиýű¾Ö®ºó£¬Êä³öÈçͼ 5 Ëùʾ¡£

ͼ 5. ²éѯ´æ´¢¹ý³ÌÖж¨ÒåµÄ SQL Óï¾äµÄÄÚ²¿ÐÎʽ

Äú¿ÉÒÔ¿´µ½£¬Êä³ö²ÎÊý EMP_NUM ÒÑÌæ»»Îª :HV00009 :HI00009£¬ÊäÈë²ÎÊý DEPT_NO ÒÑÌæ»»Îª :HV00008 :HI00008¡£ËüÓë֮ǰÔÚ´æ´¢¹ý³ÌÖж¨ÒåµÄ SQL Óï¾äÓкܴó²»Í¬¡£ÒòΪÕâ¸öÐÂÐÎʽÊÇ DB2 ÔÚ±àÒëʱºÍÖ´ÐÐʱ½«Ö´ÐеÄÐÎʽ£¬ËùÒÔÕâÊÇÄú½«ÔÚ STMTKEY ÔªËØÖÐʹÓõÄÐÎʽ¡£´ËÍ⣬¸Ã½á¹ûµÄµÚÒ»ÁÐÊÇÓë´Ë´æ´¢¹ý³ÌÏà¹ØµÄ°üÃû³Æ£¨ÔÚ±¾ÀýÖУ¬ËüΪ P1513856£©¡£ÄúÐèÒªÔÚÉÔºóµÄ²éѯÖÐʹÓôËÐÅÏ¢¼ìË÷´Ë´æ´¢¹ý³ÌµÄ·ÃÎʼƻ®¡£

²é¿´Ä¬ÈÏ·ÃÎʼƻ®

ҪȷÈϸÃÓÅ»¯ÅäÖÃÎļþ½«ÐÞ¸Ä DB2 µÄĬÈÏ·ÃÎʼƻ®£¬ÄúÐèÒªÊ×ÏÈ»ñµÃ SQL Óï¾äµ±Ç°µÄ·ÃÎʼƻ®¡£Ê¹Óà db2exfmt ¹¤¾ß£¬¨Cn Ñ¡ÏîÓë°üÃû³ÆÏà¹Ø¡£¹ØÓڴ˹¤¾ßµÄÿ¸öÑ¡ÏîµÄÏêϸÐÅÏ¢£¬Äú¿ÉÒÔ²ÎÔÄ IBM DB2 9.7 ÐÅÏ¢ÖÐÐÄÖеÄÏà¹Ø²¿·Ö£¬Çë²ÎÔÄ ²Î¿¼×ÊÁÏ Ò»½Ú¡£ÈçÇåµ¥ 9 ºÍͼ 6 Ëùʾ£¬Äú½«Ô­Ê¼·ÃÎʼƻ®±£´æÔÚÎļþ orig_plan.out ÖС£

Çåµ¥ 9. ²é¿´ SQL Óï¾äµÄԭʼ·ÃÎʼƻ®µÄ½Å±¾

db2exfmt -d sample -e db2inst1 -g -l -n 'P1513856' -s db2inst1 
-o orig_plan.out -w -1 -# 0 -v %

ͼ 6. ԭʼ·ÃÎʼƻ®

´ÓÒÔǰµÄ·ÃÎʼƻ®£¬Äú¿ÉÒÔ¿´µ½ DB2 ĬÈÏÑ¡ÔñÁËÒ»¸öǶÌ×µÄÑ­»·Á¬½ÓÀ´Ö´ÐдËÓï¾ä¡£ÌôÑ¡ÁË DEPARTMENT ×÷ΪÍⲿ±í£¨Ê¹ÓñíɨÃè·½·¨£©£¬ÌôÑ¡ EMPLOYEE ×÷ΪÄÚ²¿±í£¨Ê¹ÓÃË÷ÒýɨÃè·½·¨£¬XEMP2 ÊDZí EMPLOYEE µÄÒ»¸öË÷Òý£©¡£ÔÚÒÔÏÂʾÀýÖУ¬Äú½«Ê¹ÓÃÓÅ»¯ÅäÖÃÎļþÐÞ¸ÄÕâ¸öÁ¬½ÓÐòÁУ¨Èà EMPLOYEE ³ÉΪÍⲿ±í£¬Èà DEPARTMENT ³ÉΪÄÚ²¿±í£©¡£ÕâÑù×öµÄÄ¿µÄ²»ÊÇʵÏÖ¸ü¸ßµÄÐÔÄÜ£¬Ö»ÊÇΪÁ˱íÃ÷ÓÅ»¯ÅäÖÃÎļþÒÑÓ¦ÓÃÓÚ SQL Óï¾ä¡£

´´½¨ÓÅ»¯ÅäÖÃÎļþ

ÈçÇåµ¥ 10 Ëùʾ£¬Ê¹Óô洢¹ý³ÌÖж¨ÒåµÄ SQL Óï¾äµÄÄÚ²¿ÐÎʽ´´½¨ÓÅ»¯ÅäÖÃÎļþ¡£

Çåµ¥ 10. ÓÅ»¯ÅäÖÃÎļþµÄ½Å±¾

<?xml version='1.0' encoding='UTF-8'?>
<OPTPROFILE VERSION='9.1.0.0'>
<STMTPROFILE ID='example profile'>
<STMTKEY>
<![CDATA[SELECT COUNT(*) INTO :HV00009 :HI00009
FROM DEPARTMENT, EMPLOYEE
WHERE DEPARTMENT.DEPTNO = EMPLOYEE.WORKDEPT AND DEPARTMENT.DEPTNAME =
:HV00008 :HI00008]]>
</STMTKEY>
<OPTGUIDELINES>
<NLJOIN>
<ACCESS TABLE='EMPLOYEE'/>
<ACCESS TABLE='DEPARTMENT'/>
</NLJOIN>
</OPTGUIDELINES>
</STMTPROFILE>
</OPTPROFILE>

ÔÚÉÏÒ»¸ö½Å±¾ÖУ¬Ò»¶¨ÒªÌرð×¢ÒâÒÔϼ¸µã¡£

STMTPROFILE ÔªËØµÄ ID ÊôÐÔ£ºID ÊôÐÔµÄÖµÊÇ´ËÓÅ»¯ÅäÖÃÎļþÖÐÕâ¸öÓï¾ä¼¶ÓÅ»¯Ö¸ÄϵÄΩһ±êʶ·û¡£Èç¹û½«´ËÓÅ»¯Ö¸ÄÏÓ¦ÓÃÓÚijÌõ SQL Óï¾ä£¬Äú¿ÉÒÔ´ÓÓï¾äµÄ·ÃÎʼƻ®Öп´µ½´Ë±êʶ·û¡£

STMTKEY ÔªËØ£ºÄú±ØÐëʹÓà SQL Óï¾äµÄÄÚ²¿ÐÎʽ×÷Ϊ STMTKEY£¬·ñÔòËüÎÞ·¨³É¹¦Æ¥Å䡣ͨ³££¬ÄúʼÖÕʹÓà <![CDATA[]]> °ü×°Óï¾ä¡£

NLJOIN ÔªËØ£º´ËÔªËØÖ¸¶¨Á¬½ÓµÄ˳Ðò¡£ÕâÀÄúʹÓà EMPLOYEE ×÷ΪÍⲿ±í£¬Ê¹Óà DEPARTMENT ×÷ΪÄÚ²¿±í¡£

½«ÓÅ»¯ÅäÖÃÎļþ²åÈëÊý¾Ý¿âÖÐ

¶¨ÒåÓÅ»¯ÅäÖÃÎļþÖ®ºó£¬½«Ëü±£´æµ½Îļþ test_profile.prof ÖС£È»ºó½«´ËÊý¾Ý¼ÓÔØµ½±í SYSTOOLS.OPT_PROFILE ÖУ¬½Ó×ÅÔÙʹÓõ¼ÈëÃüÁîÍê³É´Ë²Ù×÷¡£
Ê×ÏÈ£¬Ê¹ÓÃÃû³Æ profile_file.load ¶¨Òåµ¼ÈëµÄÊý¾ÝÔ´Îļþ¡£ÈçÇåµ¥ 11 Ëùʾ£¬´ËÎļþÖ¸¶¨ÓÅ»¯ÅäÖÃÎļþµÄģʽÃû³ÆÎª Test£¬ÓÅ»¯ÅäÖÃÎļþµÄÃû³ÆÎª OPTPROF£¬ÓÅ»¯ÅäÖÃÎļþµÄÏêϸÄÚÈݰüº¬ÔÚ test_profile.prof ÎļþÖС£

Çåµ¥ 11. µ¼ÈëµÄÊý¾ÝÔ´Îļþ

"TEST","OPTPROF","test_profile.prof"

È»ºóÔËÐе¼ÈëÃüÁÈçÇåµ¥ 12 ºÍͼ 7 Ëùʾ£©½«Êý¾Ý¼ÓÔØµ½Êý¾Ý¿âÖС£

Çåµ¥ 12. µ¼ÈëÃüÁîµÄ½Å±¾

db2 "IMPORT FROM profile_file.load OF DEL MODIFIED BY LOBSINFILE 
INSERT_UPDATE INTO SYSTOOLS.OPT_PROFILE"

ͼ 7. µ¼ÈëÃüÁî

Ð޸Ĵ洢¹ý³ÌµÄ¶¨ÒåÎļþÒÔʹÓôËÓÅ»¯ÅäÖÃÎļþ

Èç¹ûÄúÏ£ÍûÔÚ´æ´¢¹ý³ÌÖÐʹÓÃÓÅ»¯ÅäÖÃÎļþ£¬³ýÁËÉèÖÃÇ°ÃæµÄ×¢²á±í±äÁ¿À´ÆôÓô˹¦ÄÜ£¬Äú»¹ÐèÒªµ÷Óà SYSPROC.SET_ROUTINE_OPTS ϵͳ´æ´¢¹ý³ÌÀ´ÉèÖÃģʽÃû³Æ£¬È»ºóÉèÖý«ÔÚÔ¤±àÒëºÍ°ó¶¨Ê±Ê¹ÓõÄÓÅ»¯ÅäÖÃÎļþµÄÃû³Æ£¬ÈçÇåµ¥ 13 Ëùʾ¡£ÄúÐèÒªÔÚ SYSPROC.SET_ROUTINE_OPTS ²ÎÊýÖÐÖ¸¶¨ OPTPROFILE Ñ¡ÏËüµÄֵΪ TEST.OPTPROF¡£ËùÒÔÄúÒÔǰ¶¨ÒåµÄÓÅ»¯ÅäÖÃÎļþ½«ÔÚΪ´Ë´æ´¢¹ý³ÌÖÐµÄ SQL Óï¾ä´´½¨·ÃÎʼƻ®Ê±Ê¹Óᣵ±È»£¬Äú¿ÉÒÔÉèÖà DB2_SQLROUTINE_PREPOPTS ×¢²á±í±äÁ¿»ñµÃÏàͬµÄ½á¹û¡£

Çåµ¥ 13. Ð޸ĵĴ洢¹ý³Ì

CONNECT TO SAMPLE%

CALL SYSPROC.SET_ROUTINE_OPTS('EXPLAIN ALL OPTPROFILE TEST.OPTPROF')%

CREATE PROCEDURE GET_EMP_NUM(
IN DEPT_NO CHAR(50),
OUT EMP_NUM INTEGER)

LANGUAGE SQL

BEGIN

SELECT COUNT(*) INTO EMP_NUM
FROM DEPARTMENT, EMPLOYEE
WHERE DEPARTMENT.DEPTNO = EMPLOYEE.WORKDEPT
AND DEPARTMENT.DEPTNAME = DEPT_NO;

END%

CONNECT RESET%

ÈçÇåµ¥ 14 Ëùʾ£¬¶ªÆúÒÑ´´½¨µÄ´æ´¢¹ý³Ì£¬È»ºóÖØÐ´´½¨Ëü¡£

Çåµ¥ 14. ÖØÐ´´½¨´æ´¢¹ý³Ì

db2 connect to sample
db2 drop procedure GET_EMP_NUM
db2 -td% -vf create_procedure.ddl

²é¿´Ð·ÃÎʼƻ®ÒÔ¼ì²éÒÑʹÓÃÁËÓÅ»¯ÅäÖÃÎļþ

Òª¼ì²éÓÅ»¯ÅäÖÃÎļþÊÇ·ñÒѳɹ¦Ê¹Óã¬ÄúÐèÒª¶Ô±Èԭʼ·ÃÎʼƻ®ÓëзÃÎʼƻ®¡£

Ê×ÏÈ£¬ÒòΪ´æ´¢¹ý³ÌÒÑÖØÐ´´½¨£¬DB2 ½«ÎªËü·ÖÅäÒ»¸öаü¡£ÔËÐÐÇåµ¥ 15 ºÍͼ 8 ÖÐËùʾµÄÃüÁ»ñµÃ´Ë´æ´¢¹ý³ÌµÄÏà¹ØµÄ°üÃû³Æ¡£

Çåµ¥ 15. »ñµÃ´æ´¢¹ý³ÌµÄ°üÃû³Æ

db2 connect to sample
db2 -tvf get_routine_sqls.sql

ͼ 8. ÖØÐ´´½¨µÄ´æ´¢¹ý³ÌµÄаüÃû³Æ

È»ºóʹÓÃÇ°ÃæµÄ°üÃû³Æ²é¿´´æ´¢¹ý³ÌµÄзÃÎʼƻ®£¬½«½á¹û±£´æÔÚÎļþ curr_plan.out ÖУ¬ÈçÇåµ¥ 16 Ëùʾ¡£

Çåµ¥ 16. »ñµÃзÃÎʼƻ®

db2exfmt -d sample -e db2inst1 -g -l -n 'P2270199' -s db2inst1 
-o curr_plan.out -w -1 -# 0 -v %

´ÓзÃÎʼƻ®£¬Äú¿ÉÒÔ¿´µ½ÓÐÒ»¸ö¸½¼ÓµÄ Profile Information ²¿·Ö£¬Èçͼ 9 Ëùʾ¡£Ëü°üº¬Ä£Ê½Ãû³Æ£¬ÓÃÓÚÉú³É´Ë SQL Óï¾äµÄ·ÃÎʼƻ®µÄÓÅ»¯ÅäÖÃÎļþ£¨ÔÚ±¾ÀýÖÐΪ TEST.OPTPROF£©£¬ÒÔ¼°Óë¸ÃÓï¾äÆ¥ÅäµÄÓï¾ä¼¶ÓÅ»¯Ö¸Ä쵀 ID¡£Õâ¸ö ID ÔÚ¶¨ÒåÓÅ»¯ÅäÖÃÎļþʱָ¶¨¡£

ͼ 9. stored procedure_1 µÄзÃÎʼƻ®

Óë´Ëͬʱ£¬´ÓзÃÎʼƻ®ÖУ¬Äú¿ÉÒÔ¿´µ½Á¬½ÓµÄ˳ÐòÒѸı䣬Èçͼ 10 Ëùʾ¡£ÏÖÔÚ£¬Íⲿ±íΪ EMPLOYEE ±í£¬ÄÚ²¿±íΪ DEPARTMENT ±í¡£ËùÒÔÄú¿ÉÒÔÖ¤Ã÷£¬ÓÅ»¯ÅäÖÃÎļþÒÑÓÃÀ´³É¹¦Éú³ÉÁË´æ´¢¹ý³ÌÖÐµÄ SQL Óï¾äµÄ·ÃÎʼƻ®¡£

ͼ 10. stored procedure_2 µÄзÃÎʼƻ®

½áÊøÓï

´æ´¢¹ý³ÌÊÇ DB2 µÄÒ»Ïî·Ç³£ÓÐÓõŦÄÜ¡£Ò»¸ö´æ´¢¹ý³ÌÖж¨ÒåµÄ SQL Óï¾äͨ³£·Ç³£¸´ÔÓ£¬²¢ÇÒÄÑÒÔµ÷ÊԺ͵÷½Ú¡£ÔÚһЩÇéÐÎÏ£¬DB2 Ñ¡ÔñµÄ·ÃÎʼƻ®¿ÉÄܲ»ÊÇÄúÏëҪʹÓõģ¬ÓÈÆäÊǵ±µ÷ÊÔÐÔÄÜÎÊÌâʱ¡£Í¨¹ýʹÓÃÓÅ»¯ÅäÖÃÎļþ£¬Äú¿ÉÒÔÓ°Ïì SQL Óï¾äµÄ·ÃÎʼƻ®£¬¶øÎÞÐè¸ü¸ÄÓ¦ÓóÌÐòºÍÊý¾Ý¿âÉèÖá£ËüÊÇÒ»¸öµ÷ÊÔÓ¦ÓóÌÐòºÍÓÅ»¯ SQL µÄ·Ç³£ÓÐЧµÄ¹¤¾ß¡£

   
2789 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí