1.µ¥ÀÌÅÍ¿Í ºñÁî´Ï½º ¾îÇø®ÄÉÀ̼ÇÀ» Àß ¾Ë¾Æ¾ß ÇÑ´Ù. µ¿ÀÏÇÑ Á¤º¸´Â ´Ù¸¥ ºñÁî´Ï½º µ¥ÀÌÅÍ ¿øõÀ¸·ÎºÎÅÍ °Ë»öµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¿øõ¿¡ Àͼ÷ÇØ¾ß ÇÑ´Ù. ´ç½ÅÀº ´ç½ÅÀÇ µ¥ÀÌÅͺ£À̽º ¾ÈÀÇ µ¥ÀÌÅÍÀÇ Å©±â¿Í ºÐÆ÷¸¦ ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÑ´Ù. ¶ÇÇÑ SQLÀ» ÀÛ¼ºÇϱâ Àü¿¡ ºñÁî´Ï½º °³Ã¼ ¾ÈÀÇ °ü°è¿Í °°Àº µ¥ÀÌÅÍ ¸ðµ¨À» ÀüüÀûÀ¸·Î ÀÌÇØÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ÀÌÇØ´Â ´ç½ÅÀÌ ¿©·¯ Å×ÀÌºí¿¡¼­ Á¤º¸¸¦ °Ë»öÇϴµ¥ À־ º¸´Ù ÁÁÀº Äõ¸®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. DESIGNER/2000°ú °°Àº CASE TOOLSÀº ´Ù¸¥ ºñÁî´Ï½º¿Í µ¥ÀÌÅͺ£À̽º °´Ã¼»çÀÌÀÇ °ü°è ¸¦ ¹®¼­È­ Çϴµ¥ ÁÁÀº ¿ªÇÒÀ» ÇÑ´Ù. 2.½ÇÁ¦ µ¥ÀÌÅ͸¦ °¡Áö°í ´ç½ÅÀÇ Äõ¸®¸¦ °Ë»çÇ϶ó. ´ëºÎºÐÀÇ Á¶Á÷Àº °³¹ß, °Ë»ç, Á¦Ç°ÀÇ 3°¡Áö µ¥ÀÌÅͺ£À̽º ȯ°æÀ» °¡Áø´Ù. ÇÁ·Î±×·¡¸Ó´Â ¾îÇø®ÄÉÀ̼ÇÀ» ¸¸µé°í °Ë»çÇϴµ¥ °³¹ß µ¥ÀÌÅͺ£À̽º ȯ°æÀ» »ç¿ëÇϴµ¥, ÀÌ ¾îÇø®ÄÉÀ̼ÇÀÌ Á¦Ç° ȯ°æÀ¸·Î ÀüȯµÇ±â Àü¿¡ ÇÁ·Î±×·¡¸Ó¿Í »ç¿ëÀÚ¿¡ ÀÇÇØ °Ë»ç ȯ°æÇÏ¿¡¼­ º¸´Ù ¾ö°ÝÇÏ°Ô °ËÅäµÇ¾î ¾ß ÇÑ´Ù. SQLÀÌ °Ë»ç ȯ°æÇÏ¿¡¼­ Å×½ºÆ®µÉ ¶§, °Ë»ç µ¥ÀÌÅͺ£À̽º°¡ °¡Áö°í ÀÖ´Â µ¥ÀÌÅÍ´Â Á¦Ç° µ¥ÀÌÅͺ£À̽º ¸¦ ¹Ý¿µÇØ¾ß ÇÑ´Ù. ºñ½ÇÁ¦ÀûÀÎ µ¥ÀÌÅ͸¦ °¡Áö°í Å×½ºÆ®µÈ SQL¹®Àº Á¦Ç° ¾È¿¡¼­´Â ´Ù¸£°Ô ÀÛµ¿ÇÒ ¼ö ÀÖ´Ù. ¾ö°ÝÇÑ Å×½ºÆ®¸¦ º¸ÀåÇϱâ À§Çؼ­´Â, °Ë»ç ȯ°æÇÏ¿¡¼­ÀÇ µ¥ÀÌÅÍ ºÐÆ÷´Â ¹Ýµå½Ã Á¦Ç° ȯ°æ¿¡¼­ ÀÇ ºÐÆ÷¿Í ¹ÐÁ¢ÇÏ°Ô ´à¾Æ¾ß ÇÑ´Ù. 3.µ¿ÀÏÇÑ SQLÀ» »ç¿ëÇ϶ó. °¡´ÉÇÑÇÑ BIND VARIABLE, STORED PROCEDURE, PACKAGEÀÇ ÀÌÁ¡À» È°¿ëÇ϶ó. IDENTICAL SQL¹® ÀÇ ÀÌÁ¡Àº PARSINGÀÌ ºÒÇÊ¿äÇϱ⿡ µ¥ÀÌÅͺ£À̽º ¼­¹ö¾È¿¡¼­ ¸Þ¸ð¸® »ç¿ëÀÇ Ãà¼Ò¿Í ºü¸¥ ¼öÇàÀ» Æ÷ÇÔÇÑ´Ù. ¿¹·Î¼­ ¾Æ·¡ÀÇ SQL ¹®Àº IDENTICALÇÏÁö ¾Ê´Ù. SELECT * FROM EMPLOYEE WHERE EMPID = 10; SELECT * FROM EMPLOYEE WHERE EMPID = 10; SELECT * FROM EMPLOYEE WHERE EMPID = 20; ±×·¯³ª I_EMPID¶ó°í À̸§ ÁÖ¾îÁø BIND VARIABLEÀ» »ç¿ëÇϸé SQL ¹®Àº ÀÌ·¸°Ô µÈ´Ù. SELECT * FROM EMPLOYEE WHERE EMPID = :I_EMPID; 4.ÁÖÀÇ ±í°Ô À妽º¸¦ »ç¿ëÇ϶ó. Å×À̺í»ó¿¡ ¸ðµç ÇÊ¿äÇÑ À妽º´Â »ý¼ºµÇ¾î¾ß ÇÑ´Ù. ÇÏÁö¸¸ ³Ê¹« ¸¹Àº À妽º´Â ¼º´ÉÀ» ¶³¾î¶ß¸± ¼ö ÀÖ´Ù. ±×·¯¸é ¾î¶»°Ô À妽º¸¦ ¸¸µé Ä®·³À» ¼±ÅÃÇØ¾ß Çϴ°¡? *ÃÖÁ¾ »ç¿ëÀÚ¿¡ ÀÇÇØ »ç¿ëµÇ´Â ¾îÇø®ÄÉÀÌ¼Ç SQL°ú Äõ¸®ÀÇ WHERE Àý¿¡¼­ ºó¹øÇÏ°Ô »ç¿ëµÇ´Â Ä®·³ ¿¡ À妽º¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. *SQL ¹®¿¡¼­ ÀÚÁÖ Å×À̺íÀ» JOINÇϴµ¥ »ç¿ëµÇ´Â Ä®·³Àº À妽ºµÇ¾î¾ß ÇÑ´Ù. *°°Àº °ªÀ» °¡Áö´Â ROW°¡ ÀûÀº ºñÀ²À» °¡Áö´Â Ä®·³¿¡ À妽º¸¦ »ç¿ëÇ϶ó. *Äõ¸®ÀÇ WHERE Àý¿¡¼­ ¿ÀÁ÷ ÇÔ¼ö¿Í OPERATOR·Î »ç¿ëµÇ´Â Ä®·³¿¡´Â À妽º¸¦ ¸¸µé¸é ¾ÈµÈ´Ù. *ÀÚÁÖ º¯°æµÇ°Å³ª À妽º¸¦ ¸¸µé¶§ ¾ò´Â È¿À²¼ºº¸´Ù »ðÀÔ, °»½Å, »èÁ¦·Î ÀÎÇØ ÀÒ´Â È¿À²¼ºÀÌ ´õ Å« Ä®·³¿¡´Â À妽º¸¦ ¸¸µé¸é ¾ÈµÈ´Ù. ÀÌ·¯ÇÑ OPERATIONÀº À妽º¸¦ À¯ÁöÇϱâ À§ÇÑ ÇÊ¿ä ¶§¹®¿¡ ´À·Á Áø´Ù. *UNIQUE À妽º´Â ´õ ³ªÀº ¼±Åüº ¶§¹®¿¡ NONUNIQUE À妽ºº¸´Ù ÁÁ´Ù. PRIMARY KEY Ä®·³¿¡ UNIQUE À妽º¸¦ »ç¿ëÇÑ´Ù. ±×¸®°í FOREIGN KEY Ä®·³°ú WHERE Àý¿¡¼­ ÀÚÁÖ »ç¿ëµÇ´Â Ä®·³¿¡´Â NONUNIQUE À妽º¸¦ »ç¿ëÇÑ´Ù. 5.°¡¿ëÇÑ À妽º PATH¸¦ ¸¸µé¾î¶ó À妽º¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ±â¼úÇÑ SQL¹®À» ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ½ÄÀ¸·Î SQLÀ» ÀÛ¼ºÇ϶ó. OPTIMIZER´Â À妽º°¡ Á¸ÀçÇϱ⠶§¹®¿¡ À妽º¸¦ »ç¿ëÇÏ´Â ACESS PATH¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. µû¶ó¼­ ACCESS PATH ´Â ¹Ýµå½Ã SQLÀÌ »ç¿ëÇÒ ¼ö ÀÖ°Ô ¸¸µé¾î Á®¾ß ÇÑ´Ù. SQL HINT¸¦ »ç¿ëÇÏ´Â °ÍÀº À妽º »ç¿ëÀ» º¸ÁõÇØÁÖ´Â ¹æ¹ýÁß ÇϳªÀÌ´Ù. ƯÁ¤ ACCESS PATH¸¦ ¼±ÅÃÇϱâ À§ÇÑ ´ÙÀ½ÀÇ ÈùÆ®¸¦ Âü°í Ç϶ó 6.°¡´ÉÇϸé EXPLAIN°ú TKPROF¸¦ »ç¿ëÇÏ¶ó ¸¸¾à SQL¹®ÀÌ Àß ´Ùµë¾îÁöÁö ¾Ê¾Ò´Ù¸é ºñ·Ï ¿À¶óŬ µ¥ÀÌÅͺ£À̽º°¡ Àß Â¥¿©Á® À־ È¿À²¼ºÀÌ ¶³¾î Áú °ÍÀÌ´Ù. ÀÌ·² °æ¿ì EXPLAIN TKPROF¿¡ ´É¼÷ÇØÁ®¾ß ÇÑ´Ù. EXPALIN PLANÀº SQLÀÌ »ç¿ëÇÏ´Â ACCESS PATH¸¦ ¹ß°ßÇÒ ¼ö ÀÖ°Ô ÇØÁÖ°í TKPROF´Â ½ÇÁ¦ PERFORMANECÀÇ Åë°èÄ¡¸¦ º¸¿©ÁØ´Ù. ÀÌ TOOLÀº ¿À¶óŬ ¼­¹ö ¼ÒÇÁÆ®¿þ¾î¿¡ Æ÷ÇԵǾî ÀÖ°í SQLÀÇ ¼º´ÉÀ» Çâ»ó½ÃÄÑ ÁØ´Ù. 7.OPTIMIZER¸¦ ÀÌÇØÇ϶ó. SQLÀº RULE-BASED³ª COST-BASEDÁß Çϳª¸¦ ÀÌ¿ëÇؼ­ ±âµ¿µÈ´Ù.±âÁ¸ÀÇ ¼ÒÇÁÆ®¿þ¾î´Â RULE BASED ¹æ½ÄÀ» äÅÃÇÏ°í ÀÖ´Ù. ±×¸®°í ¸¹Àº ¿À¶óŬ ¼ÒÇÁÆ®¿þ¾î°¡ ÀÌ·¯ÇÑ ¹æ½ÄÀ» ¿À·§µ¿¾È »ç¿ëÇØ ¿Ô´Ù. ±×·¯³ª »õ·Î Ãâ½ÃµÈ ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇؼ­´Â COST BASED ¹æ½ÄÀÇ OPTIMIZER¸¦ °í·ÁÇØ¾ß ÇÑ´Ù. ¿À¶óŬÀº »õ·Î Ãâ½ÃµÇ´Â ÇÁ·Î±×·¥À» COST BASED¹æ½ÄÀ¸·Î ¾÷±×·¹ÀÌµå ½ÃÄÑ¿ÔÀ¸¸ç ÀÌ·¯ÇÑ ¹æ½ÄÀº ½Ã½ºÅÛÀ» ÈξÀ ´õ ¾ÈÁ¤ÀûÀ¸·Î ¸¸µé¾ú´Ù. ¸¸¾à COST BASED¹æ½ÄÀÇ OPTIMIZER¸¦ »ç¿ëÇÑ´Ù¸é ¹Ýµå½Ã ANALYZE ½ºÅ°¸¶¸¦ Á¤±âÀûÀ¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ANALYZE½ºÅ°¸¶´Â µ¥ÀÌÅͺ£À̽º Åë°è¸¦ µ¥ÀÌÅÍ »çÀü Å×ÀÌºí¿¡ ±â·ÏÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇÏ¸ç ±×·¸°Ô µÇ¸é COST BASED OPTIMIZER°¡ ±×°ÍÀ» »ç¿ëÇÏ°Ô µÈ´Ù. SQLÀº COST BASED OPTIMIZER¸¦ »ç¿ëÇÒ ¶§¸¸ Àß Á¶Á¤µÉ ¼ö ÀÖ´Ù. ¸¸¾à RULE BASED¿¡¼­ COST BASED·Î ¹Ù²Ù°í ½Í´Ù¸é µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ´Â ¸ðµç ¼ÒÇÁÆ®¿þ¾îÀÇ ¸ðµç SQL¹®ÀÇ ¼º´ÉÀ» Æò°¡ÇØ º¸¾Æ¾ß ÇÑ´Ù. 8.Áö¿±ÀûÀ¸·Î µ¿ÀÛÇÏ´õ¶óµµ Àü¿ªÀûÀ¸·Î »ý°¢Ç϶ó Ç×»ó ÁÖÀÇÇÒ °ÍÀº ÇϳªÀÇ SQL¹®À» Á¶Á¤Çϱâ À§ÇØ »ý±ä µ¥ÀÌÅͺ£À̽º¾ÈÀÇ º¯È­´Â ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥ À̳ª ´Ù¸¥ »ç¿ëÀÚ°¡ ÀÌ¿ëÇÏ´Â ´Ù¸¥ ¸í·É¹®¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù´Â »ç½ÇÀÌ´Ù. 9.WHEREÀýÀº ¸Å¿ì Áß¿äÇÏ´Ù. ºñ·Ï À妽º°¡ °¡¿ëÇÏ´Ù°í Çصµ ´ÙÀ½ÀÇ WHERE ÀýÀº ±× À妽º ACCESS PATH ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. (Áï COL1 °ú COL2´Â °°Àº Å×ÀÌºí¿¡ ÀÖÀ¸¸ç À妽º´Â COL1¿¡ ¸¸µé¾îÁø´Ù.) COL1 > COL2 COL1 < COL2 COL1 > = COL2 COL1 <= COL2 COL1 IS NULL COL1 IS NOT NULL. À妽º´Â NULL°ªÀ» °®´Â Ä®·³¿¡´Â ROWID¸¦ ÀúÀåÇÏÁö ¾Ê´Â´Ù. µû¶ó¼­ NULL°ªÀ» °®´Â ROW¸¦ °Ë»öÇÒ ¶§´Â À妽º¸¦ »ç¿ëÇÏÁö ¸øÇÑ´Ù. COL1 NOT IN (VALUE1, VALUE2 ) COL1 != EXPRESSION COL1 LIKE '%PATTERN'. ÀÌ·² °æ¿ì THE LEADING EDGE OF THE INDEX(?) ´Â ÀÛµ¿µÇÁö ¾Ê°í À妽º°¡ »ç¿ëµÇÁö ¸øÇÏ°Ô ÇÑ ´Ù. ÇÑÆí COL1 LIKE 'PATTERN %'À̳ª COL1 LIKE 'PATTERN % PATTERN%' ´Â ÇÑÁ¤µÈ À妽º ½ºÄµÀ» ¼öÇàÇϱ⠶§¹®¿¡ À妽º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. NOT EXISTS SUBQUERY EXPRESSION1 = EXPRESSION2. À妽ºµÈ Ä÷³À» Æ÷ÇÔÇϴ ǥÇö(EXPRESSION), ÇÔ¼ö, °è»ê(CALCULATIONS)Àº À妽º¸¦ »ç¿ëÇÏÁö ¸øÇÑ´Ù. ´ÙÀ½ÀÇ ¿¹¿¡¼­ º¸¸é UPPER SQL ÇÔ¼ö¸¦ »ç¿ëÇϸé À妽º ½ºÄµÀ» »ç¿ëÇÒ ¼ö ¾ø°í FULL TABLE SCANÀ¸·Î ³¡³ª°í ¸¸´Ù. SELECT DEPT_NAME FROM DEPARTMENT WHERE UPPER(DEPT_NAME) LIKE 'SALES%'; 10.·¹ÄÚµå ÇÊÅ͸µÀ» À§Çؼ­´Â HAVINGº¸´Ù´Â WHERE¸¦ »ç¿ëÇ϶ó À妽º°¡ °É·ÁÀÖ´Â Ä®·³¿¡´Â GROUP BY¿Í °°ÀÌ HAVINGÀýÀ» »ç¿ëÇÏÁö ¸¶¶ó. ÀÌ °æ¿ì À妽º´Â »ç¿ë µÇÁö ¾Ê´Â´Ù. ¶ÇÇÑ WHEREÀý·Î µÈ ROW¸¦ »ç¿ëÇÏÁö ¸¶¶ó. ¸¸¾à EMPÅ×À̺íÀÌ DEPTIDÄ÷³¿¡ À妽º ¸¦ °¡Áö°í ÀÖ´Ù¸é ´ÙÀ½ ÁúÀÇ´Â HAVING ÀýÀ» ÀÌ¿ëÇÏÁö ¸øÇÑ´Ù. SELECT DEPTID, SUM(SALARY) FROM EMP GROUP BY DEPTID HAVING DEPTID = 100; ±×·¯³ª °°Àº ÁúÀÇ°¡ À妽º¸¦ »ç¿ëÇϱâ À§ÇØ ´Ù½Ã ¾º¿©Áú ¼ö ÀÖ´Ù. SELECT DEPTID, SUM(SALARY) FROM EMP WHERE DEPTID = 100 GROUP BY DEPTID; 11. WHERE Àý¿¡ ¼±Çà INDEX Ä®·³À» ¸í½ÃÇ϶ó. º¹ÇÕ À妽ºÀÇ °æ¿ì, ¼±Çà À妽º°¡ WHEREÀý¿¡ ¸í½ÃµÇ¾î ÀÖ´Ù¸é Äõ¸®´Â ±× À妽º ¸¦ »ç¿ëÇÒ °ÍÀÌ ´Ù. ´ÙÀ½ÀÇ ÁúÀÇ´Â PART_NUM°ú PRODUCT_ID Ä®·³¿¡ ÀÖ´Â PRIMARY KEY CONSTRAINT¿¡ ±âÃÊÇÑ º¹ÇÕ À妽º¸¦ ÀÌ¿ëÇÒ °ÍÀÌ´Ù. SELECT * FROM PARTS WHERE PART_NUM = 100; ¹Ý¸é, ´ÙÀ½ÀÇ Äõ¸®´Â º¹ÇÕÀ妽º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. SELECT * FROM PARTS WHERE PRODUCT_ID = 5555; °°Àº ¿äû(REQUEST)ÀÌ À妽º¸¦ ÀÌ¿ëÇϱâ À§ÇØ ´Ù½Ã ¾º¾î Áú ¼ö ÀÖ´Ù. ´ÙÀ½ ÁúÀÇÀÇ °æ¿ì, PART_NUMÄ÷³Àº Ç×»ó 0 º¸´Ù Å« °ªÀ» °¡Áú°ÍÀÌ´Ù. SELECT * FROM PARTS WHERE PART_NUM > 0 AND PRODUCT_ID = 5555; 12.À妽º SCAN°ú FULL TABLE SCANÀ» Æò°¡Ç϶ó. ÇÑ Çà(ROW)ÀÇ 15% ÀÌ»óÀ» °Ë»öÇÏ´Â °æ¿ì¿¡´Â FULL TABLE SCANÀÌ INDEX ACESS PATHº¸´Ù ºü¸£ ´Ù. ÀÌ·± °æ¿ì, SQLÀÌ FULL TABLE SCANÀ» ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï ¿©·¯ºÐ ½º½º·Î SQLÀ» ÀÛ¼ºÇ϶ó. ´ÙÀ½ÀÇ ¸í·É¹®Àº ºñ·Ï À妽º°¡ SALARY COLUMN¿¡ ¸¸µé¾îÁ® À־ À妽º SCANÀ» »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ù ¹ø° SQL¿¡¼­, FULL HINT¸¦ »ç¿ëÇÑ´Ù¸é ¿À¶óŬÀº FULL TABLE SCANÀ» ¼öÇàÇÒ °ÍÀÌ ´Ù. À妽ºÀÇ »ç¿ëÀÌ ³ª»Û Á¡ÀÌ ´õ ¸¹´Ù¸é ¾Æ·¡ÀÇ ±â¼úÀ» ÀÌ¿ëÇؼ­ À妽º ¼öÇàÀ» ¸·À»¼ö ÀÖ´Ù. SELECT * --+FULL FROM EMP WHERE SALARY = 50000; SELECT * FROM EMP WHERE SALARY+0 = 50000; ´ÙÀ½ÀÇ ¸í·É¹®Àº ºñ·Ï À妽º°¡ SS# COLUMN¿¡ À־ À妽º SCANÀ» »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. SELECT * FROM EMP WHERE SS# || ' ' = '111-22-333'; ¿À¶óŬÀÌ ºÒºÐ¸íÇÑ µ¥ÀÌÅÍ º¯È¯À» ¼öÇàÇØ¾ß ÇÏ´Â °æ¿ì À妽º°¡ Ç×»ó »ç¿ëµÇÁö¾Ê´Â °ÍÀº ¾Æ´Ï´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸¸é, EMP Ä®·³¿¡ ÀÖ´Â SALARY´Â ¼ýÀÚÇü Ä®·³ÀÌ°í ¹®ÀÚÇüÀÌ ¼ýÀÚ°ªÀ¸·Î º¯È¯µÈ´Ù. SELECT * FROM EMP WHERE SALARY = '50000'; Å×À̺íÀÇ ÇàÀÌ 15%À̰ųª ±×º¸´Ù ÀÛÀ» °æ¿ì À妽º ½ºÄµÀº º¸´Ù Àß ¼öÇà µÉ °ÍÀÌ´Ù. ¿Ö³Ä Çϸé Àε¦ ½º ½ºÄµÀº °Ë»öµÈ Çà(ROW)Çϳª Çϳª ¸¶´Ù ´ÙÁßÀÇ ³í¸®ÀûÀÎ Àб⠰˻ö(READ)À» ÇÒ °ÍÀ̱⠶§¹®ÀÌ ´Ù. ±×·¯³ª FULL TABLE SCANÀº ÇϳªÀÇ ³í¸®Àû ÀÎ Àб⠰˻ö ¿µ¿ª ¾ÈÀÇ BLOCK¿¡ ÀÖ´Â ¸ðµç ÇàµéÀ» ÀÐÀ» ¼ö ÀÖ´Ù. ±×·¡¼­ Å×À̺íÀÇ ¸¹Àº Çàµé¿¡ Á¢±ÙÇØ¾ß ÇÏ´Â °æ¿ì¿¡´Â FULL TABLE SCANÀÌ ³´´Ù. ¿¹·Î ´ÙÀ½ÀÇ °æ¿ì¸¦ º¸ÀÚ. ¸¸¾à EMP TABLE°ú ±× Å×À̺íÀÇ ¸ðµç À妽º¿¡ ´ëÇØ ANALYZE¶ó´Â ¸í·É¾î °¡ ¼öÇàµÈ´Ù¸é, ¿À¶óŬÀº µ¥ÀÌÅÍ »çÀüÀÎ USER_TABLES¿Í USER_INDEXES¿¡ ´ÙÀ½°ú °°Àº Åë°èÄ¡¸¦ »êÃâÇØ ³½´Ù. TABLE STATISTICS: NUM_ROWS = 1000 BLOCKS = 100 INDEX STATISTICS: BLEVEL = 2 AVG_LEAF_BLOCKS_PER_KEY = 1 AVG_DATA_BLOCKS_PER_KEY = 1 ÀÌ·¯ÇÑ Åë°èÄ¡¿¡ ±Ù°ÅÇؼ­, ¾Æ·¡¿¡ º¸ÀÌ´Â °ÍÀÌ °¢°¢ÀÇ ´Ù¸¥ SCAN¿¡ ´ëÇÑ ³í¸®ÀûÀÎ Àбâ(READ)-Áï ACESSµÈ BLOCKÀÌ µÉ °ÍÀÌ´Ù. USE OF INDEX TO RETURN ONE ROW = 3 (BLEVEL+(AVG_LEAF_BLOCKS_PER_KEY - 1) + AVG_DATA_PER_KEY FULL TABLE SCAN = 100 (BLOCKS) USE OF INDEX TO RETURN ALL ROWS = 3000 (NUM_ROWS * BLOCKS ACCESSED TO RETURN ONE ROW USING INDEX) 13. À妽º ½ºÄµ¿¡ ORDER BY¸¦ »ç¿ëÇ϶ó ¿À¶óŬÀÇ OPTIMIZER´Â , ¸¸¾à ORDER BY¶ó´Â ÀýÀÌ À妽ºµÈ Ä®·³¿¡ ÀÖ´Ù¸é À妽º ½ºÄµÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. ¾Æ·¡ÀÇ ÁúÀÇ´Â ÀÌ·¯ÇÑ Á¡À» º¸¿© ÁÖ´Â °ÍÀε¥ ÀÌ ÁúÀÇ´Â ºñ·Ï ±× Ä®·³ÀÌ WHERE Àý¿¡ ¸í½Ã µÇ¾î ÀÖÁö ¾Ê´Ù°í Çصµ EMPIDÄ÷³¿¡ ÀÖ´Â °¡¿ëÇÑ À妽º¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ÀÌ ÁúÀÇ´Â À妽º·ÎºÎ ÅÍ °¢°¢ÀÇ ROWID¸¦ °Ë»öÇÏ°í ±× ROWID¸¦ »ç¿ëÇÏ´Â Å×ÀÌºí¿¡ Á¢±ÙÇÑ´Ù. SELECT SALARY FROM EMP ORDER BY EMPID; ¸¸¾à ÀÌ ÁúÀÇ°¡ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù¸é, ´ç½ÅÀº À§¿¡¼­ ¸í½ÃµÇ¾ú´ø FULL HINT¸¦ »ç¿ëÇÏ´Â °°Àº ÁúÀǸ¦ ´Ù½Ã ÀÛ¼ºÇÔÀ¸·Î½á ´Ù¸¥ ´ë¾ÈµéÀ» ÀÌ¿ëÇØ º¼ ¼ö ÀÖ´Ù. 14. ÀÚ½ÅÀÇ µ¥ÀÌÅ͸¦ ¾Ë¾Æ¶ó ³»°¡ ÀÌ¹Ì ¼³¸íÇÑ °Íó·³, ´ç½ÅÀº ´ç½ÅÀÇ µ¥ÀÌÅ͸¦ »ó¼¼ÇÏ°Ô ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù.¿¹¸¦ µé¾î ´ç½ÅÀÌ BOXER¶ó´Â Å×À̺íÀ» °¡Áö°í ÀÖ°í ±× Å×À̺íÀÌ À¯ÀÏÇÏÁö ¾ÊÀº À妽º¸¦ °¡Áø SEX¶ó´Â Ä÷³°ú BOXER_NAMEÀ̶ó´Â µÎ °³ÀÇ Å×À̺íÀ» °¡Áö°í ÀÖ´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¸¸¾à ±× Å×ÀÌºí¿¡ °°Àº ¼öÀÇ ³²ÀÚ, ¿©ÀÚ º¹¼­°¡ ÀÖ´Ù¸é ¿À¶óŬÀÌ FULL TABLE SCANÀ» ¼öÇàÇÏ´Â °æ¿ì ´ÙÀ½ÀÇ ÁúÀÇ°¡ ÈξÀ ºü¸¦ °ÍÀÌ´Ù. SELECT BOXER_NAME FROM BOXER WHERE SEX = 'F'; ´ç½ÅÀº ´ÙÀ½°ú °°ÀÌ ±â¼úÇÔÀ¸·Î½á ÁúÀÇ°¡ FULL TABLE SCANÀ» ¼öÇàÇÏ´ÂÁö¸¦ È®½ÇÇÏ°Ô ÇصѼö ÀÖ´Ù. SELECT BOXER_NAME --+ FULL FROM BOXER WHERE SEX = 'F'; ¸¸¾à Å×ÀÌºí¿¡ 980 ¸íÀÇ ³²¼º º¹¼­ µ¥ÀÌÅÍ°¡ ÀÖ´Ù¸é, ÁúÀÇ´Â À妽º SCANÀ¸·Î ³¡³ª±â ¶§¹®¿¡ ¾Æ·¡Çü½ÄÀÇ ÁúÀÇ°¡ ´õ ºü¸¦ °ÍÀÌ´Ù. SELECT BOXER_NAME --+ INDEX (BOXER BOXER_SEX) FROM BOXER WHERE SEX = 'F'; ÀÌ ¿¹´Â µ¥ÀÌÅÍÀÇ ºÐÆ÷¿¡ ´ëÇØ Àß ¾Ë°í ÀÖ´Â °ÍÀÌ ¾ó¸¶³ª Áß¿äÇÑ °¡¸¦ ¿¹½ÃÇØ ÁØ´Ù. µ¥ÀÌÅÍ°¡ ¸¹¾ÆÁö°í(GROW) µ¥ÀÌÅÍ ºÐÆ÷°¡ º¯È­ÇÏ´Â °Íó·³ SQL µµ ¸Å¿ì ´Ù¾çÇÒ °ÍÀÌ´Ù. ¿À¶óŬÀº OPTIMIZER °¡ Å×ÀÌºí¿¡ ÀÖ´Â µ¥ÀÌÅÍÀÇ ºÐÆ÷¸¦ Àß ÀνÄÇÏ°í ÀûÀýÇÑ ½ÇÇà °èȹÀ» ¼±ÅÃÇϵµ·Ï Çϱâ À§ÇØ ¿À¶óŬ 7.3 ¿¡ HISTOGRAMS¶ó´Â ±â´ÉÀ» Ãß°¡Çß´Ù. 15. KNOW WHEN TO USE LARGE-TABLE SCANS. À۰ųª Å« Å×ÀÌºí¿¡¼­ ÇàµéÀ» ÃßÃâÇÒ ¶§, Àüü Å×À̺íÀÇ °Ë»öÀº ÀÎÅؽº¸¦ »ç¿ëÇÑ °Ë»öº¸´Ù ¼º´ÉÀÌ ´õ ÁÁÀ» ¼öµµ ÀÖ´Ù. ¸Å¿ì Å« Å×À̺íÀÇ À妽º °Ë»öÀº ¼ö¸¹Àº À妽º¿Í Å×ÀÌºí ºí·ÏÀÇ °Ë»öÀÌ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ ºí·ÏµéÀÌ µ¥ÀÌÅͺ£ÀÌ ½º ¹öÆÛ Ä³½¬¿¡ À̵¿µÇ¸é °¡´ÉÇÑÇÑ ¿À·¡µµ·Ï ±×°÷¿¡ ¸Ó¹«¸¥ ´Ù. ±×·¡¼­ ÀÌ·¯ÇÑ ºí·ÏµéÀÌ ´Ù¸¥ ÁúÀǵ ÇÊ¿äÇÏÁö ¾ÊÀ» ¼öµµ Àֱ⠶§¹®¿¡, µ¥ÀÌÅͺ£À̽º ¹öÆÛ È÷Æ® ºñÀ²ÀÌ °¨¼ÒÇÏ¸ç ´ÙÁß »ç¿ëÀÚ ½Ã½ºÅÛÀÇ ¼º´Éµµ ÀúÇϵDZ⵵ ÇÑ´Ù. ±×·¯³ª Àüü Å×ÀÌºí °Ë»ö¿¡ ÀÇÇؼ­ ÀÐÇôÁø ºí·ÏµéÀº µ¥ÀÌÅͺ£À̽º ¹öÆÛ Ä³½¬¿¡¼­ ÀÏÂï Á¦°Å°¡ µÇ¹Ç·Î µ¥ÀÌÅͺ£À̽º ¹öÆÛ Ä³½¬ È÷Æ® ºñÀ²Àº ¿µÇâÀ» ¹ÞÁö ¾Ê°Ô µÈ´Ù. 16. MINIMIZE TABLE PASSES. º¸Åë, SQLÁúÀǽà ÂüÁ¶ÇÏ´Â Å×À̺íÀÇ ¼ýÀÚ¸¦ ÁÙÀÓÀ¸·Î ¼º´ÉÀ» Çâ»ó½ÃŲ´Ù. ÂüÁ¶µÇ´Â Å×À̺íÀÇ ¼ýÀÚ °¡ ÀûÀ»¼ö·Ï ÁúÀÇ´Â »¡¶óÁø´Ù. ¿¹¸¦ µé¸é NAME, STATUS, PARENT_INCOME, SELF_INCOMEÀÇ ³×°³ ÀÇ Ä÷³À¸·Î ÀÌ·ç¾îÁø Çлý Å×ÀÌºí ¿¡¼­ ºÎ¸ð´Ô¿¡ ÀÇÁ¸ÇÏ´Â Çлý°ú µ¶¸³ÇÑ ÇлýÀÇ À̸§°ú ¼öÀÔ¿¡ ´ëÇؼ­ ÁúÀǽÃ, ÀÌ Çлý Å×À̺íÀ» µÎ¹ø ÂüÁ¶ÇÏ¿© ÁúÀÇÇÏ°Ô µÈ´Ù.. SELECT NAME, PARENT_INCOME FROM STUDENT WHERE STATUS = 1 UNION SELECT NAME, SELF_INCOME FROM STUDENT WHERE STATUS = 0; ( NAMEÀÌ ÇÁ¶óÀ̸Ӹ® Å°À̸ç, STATUS´Â µ¶¸³ÇÑ ÇлýÀÇ °æ¿ì´Â 1, ºÎ¸ð´Ô¿¡ ÀÇÁ¸ÀûÀÎ ÇлýÀº 0À¸·Î Ç¥½ÃÇÑ´Ù) À§ÀÇ °°Àº °á°ú¸¦ Å×À̺íÀ» µÎ¹ø ÂüÁ¶ÇÏÁö ¾Ê°íµµ ÁúÀÇ ÇÒ ¼ö ÀÖ´Ù. SELECT NAME,PARENT_INCOME*STATUS + SELF_INCOME(1-STATUS) FROM STUDENT; 17. JOIN TABLES IN THE PROPER ORDER. ´Ù¼öÀÇ Å×À̺í Á¶Àνà Å×À̺íµéÀÇ Á¶ÀεǴ ¼ø¼­´Â ¸Å¿ì Áß¿äÇÏ´Ù. Àü¹ÝÀûÀ¸·Î, ¿Ã¹Ù¸¥ ¼ø¼­·Î Å×ÀÌ ºíÀÌ Á¶ÀεǾú´Ù¸é ÀûÀº ¼öÀÇ ÇàµéÀÌ ÁúÀǽà ÂüÁ¶µÈ´Ù. ¾ðÁ¦³ª ´Ù¼öÀÇ Á¶ÀÎµÈ Å×À̺íµéÀ» ÁúÀǽà ¿ì¼± ¾ö°ÝÇÏ°Ô Á¶»çÇÏ¿© ÇàµéÀÇ ¼ýÀÚ¸¦ ÃÖ´ëÇÑÀ¸·Î ÁÙÀδÙ. ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î ¿ÉƼ¸¶ÀÌÀú´Â Á¶ÀÎÀÇ Â÷ÈÄ ´Ü°è¿¡¼­ ÀûÀº ÇàµéÀ» Á¶»çÇÏ°Ô µÈ´Ù. »Ó¸¸ ¾Æ´Ï¶ó, ¿©·¯ Á¶ÀÎÀ» Æ÷ÇÔÇÏ´Â LOOP JOIN¿¡¼­´Â °¡Àå ¸ÕÀú ÂüÁ¶µÇ´Â Å×À̺í(DRIVING TABLE)ÀÌ ÇàµéÀ» ÃÖ¼ÒÇÑÀ¸·Î ¸®ÅÏÇϵµ·Ï ÇؾßÇÑ´Ù. ±×¸®°í, ¸¶½ºÅÍ¿Í »ó¼¼ Å×À̺í Á¶Àνÿ¡´Â(¿¹¸¦ µé¸é ORDER & ORDER LINE ITEM TABLES) ¸¶½ºÅÍ Å×À̺í À» ¸ÕÀú ¿¬°á ½ÃÄÑ¾ß ÇÑ´Ù. ±ÔÄ¢¿¡ ±Ù°ÅÇÑ ¿ÉƼ¸¶ÀÌÀúÀÇ °æ¿ì¿¡´Â FROM CLAUSEÀÇ ¸¶Áö¸· Å×À̺í ÀÌ NESTED LOOP JOINÀÇ DRIVING TABLEÀÌ µÈ´Ù. NESTED LOOP JOINÀÌ ÇÊ¿äÇÑ °æ¿ì¿¡´Â LOOP ÀÇ ¾ÈÂÊÀÇ Å×ÀÌºí¿¡´Â ÀÎÅؽº¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ» °í·ÁÇÒ ¸¸ÇÏ´Ù. EXPLAIN PLAN°ú TKPROF´Â Á¶ÀΠŸÀÔ, Á¶ÀÎ Å×ÀÌºí ¼ø¼­, Á¶ÀÎÀÇ ´Ü°èº° ó¸®µÈ ÇàµéÀÇ ¼ýÀÚµéÀ» ³ªÅ¸³½´Ù. ºñ¿ë¿¡ ±Ù°ÅÇÑ ¿ÉƼ¸¶ÀÌÀúÀÇ °æ¿ì¿¡´Â WHERE CLAUSE¿¡ º¸¿©Áö´Â Å×À̺íÀÇ ¼ø¼­´Â ¿ÉƼ¸¶ÀÌÀú°¡ °¡Àå ÃÖÀûÀÇ ½ÇÇà °èȹÀ» ãÀ¸·Á°í ÇÏ´Â °Í°ú »ó°ü ¾ø´Ù. Á¶ÀεǴ Å×À̺íÀÇ ¼ø¼­¸¦ ÅëÁ¦Çϱâ À§ÇØ ¼­ ORDERED HINT¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ³´´Ù. SELECT ORDERS.CUSTID, ORDERS.ORDERNO, ORDER_LINE_ITEMS.PRODUCTNO --+ORDERED FROM ORDERS, ORDER_LINE_ITEMS WHERE ORDERS.ORDERNO = ORDER_LINE_ITEMS.ORDERNO; 18. USE INDEX-ONLY SEARCHES WHEN POSSIBLE. °¡´ÉÇÏ´Ù¸é, À妽º¸¸À» ÀÌ¿ëÇÏ¿© ÁúÀǸ¦ »ç¿ëÇ϶ó. ¿ÉƼ¸¶ÀÌÀú´Â ¿ÀÁ÷ À妽º¸¸À» ãÀ» °ÍÀÌ´Ù. ¿ÉƼ¸¶ÀÌÀú´Â SQLÀ» ¸¸Á·½ÃÅ°´Â ¸ðµç Á¤º¸¸¦ À妽º¿¡¼­ ãÀ»¼ö ÀÖÀ»¶§,À妽º¸¸À» ÀÌ¿ëÇÒ °ÍÀÌ´Ù. ¿¹¸¦µé¸é, EMPÅ×À̺íÀÌ LANME°ú FNAMEÀÇ ¿­¿¡ º¹ÇÕ À妽º¸¦ °¡Áö°í ÀÖ´Ù¸é ´ÙÀ½ÀÇ ÁúÀÇ´Â À妽º¸¸Àº ÀÌ¿ëÇÒ °ÍÀÌ´Ù. SELECT FNAME FROM EMP WHERE LNAME = 'SMITH'; ¹Ý¸é¿¡ ´ÙÀ½ÀÇ ÁúÀÇ´Â À妽º¿Í Å×À̺íÀ» ¸ðµÎ ÂüÁ¶ÇÑ´Ù. SELECT FNAME , SALARY FROM EMP WHERE LNAME = 'SMITH'; 19. REDUNDANCY IS GOOD. WHERE CLAUSE¿¡ °¡´ÉÇÑÇÑ ¸¹Àº Á¤º¸¸¦ Á¦°øÇ϶ó. ¿¹¸¦ µé¸é WHERE COL1 = COL2 AND COL1 = 10 À̶ó¸é ¿ÉƼ¸¶ÀÌÀú´Â COL2=10À̶ó°í Ãß·ÐÇÏÁö¸¸, WHERE COL1 = COL2 AND COL2 = COL3À̸é COL1=COL3À̶ó°í ÃÊ·ÐÇÏÁö´Â ¾Ê´Â´Ù. 20. KEEP IT SIMPLE, STUPID. °¡´ÉÇϸé SQL¹®À» °£´ÜÇÏ°Ô ¸¸µé¶ó. ¸Å¿ì º¹ÀâÇÑ SQL¹®Àº ¿ÉƼ¸¶ÀÌÀú¸¦ ¹«·ÂÈ­½Ãų ¼öµµ ÀÖ´Ù. ¶§·Î´Â ´Ù¼öÀÇ °£´ÜÇÑ SQL¹®ÀÌ ´ÜÀÏÀÇ º¹ÀâÇÑ SQL¹®º¸´Ù ¼º´ÉÀÌ ÁÁÀ» ¼öµµ ÀÖ´Ù. ¿À¶óŬÀÇ ºñ¿ë¿¡ ±Ù°ÅÇÑ ¿ÉƼ¸¶ÀÌÀú´Â ¾ÆÁ÷Àº ¿Ïº®ÇÏÁö¾Ê´Ù. ±×·¡¼­ EXPLAIN PLAN¿¡ ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù. ¿©±â¼­ ºñ¿ëÀ̶õ »ó´ëÀûÀÎ °³³äÀ̱⿡ Á¤È®È÷ ±×°ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö ¾ËÁö ¸ñÇÑ´Ù. ÇÏÁö¸¸ ºÐ¸íÇÑ °ÍÀº ÀûÀº ºñ¿ëÀÌ º¸´Ù ÁÁÀº ¼º´ÉÀ» ÀǹÌÇÑ´Ù´Â °ÍÀÌ´Ù. Á¾Á¾ Àӽà Å×À̺íÀ» »ç¿ëÇÏ¿© ¸¹Àº Å×À̺íµéÀ» Æ÷ÇÔÇÏ´Â º¹ÀâÇÑ SQL Á¶ÀÎÀ» ÂÉ°³´Â °ÍÀÌ È¿À²ÀûÀÏ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¸é, Á¶ÀÎÀÌ ´ë·®ÀÇ µ¥ÀÌÅÍ°¡ ÀÖ´Â 8°³ÀÇ Å×À̺íÀ» Æ÷ÇÔÇÒ ¶§, º¹ÀâÇÑ SQLÀ» µÎ ¼¼°³ÀÇ SQL·Î ÂÉ°³´Â °ÍÀÌ ³´À» ¼ö ÀÖ´Ù. °¢°¢ÀÇ ÁúÀÇ´Â ¸¹¾Æ¾ß ³×°³Á¤µµÀÇ Å×À̺íµéÀ» Æ÷ÇÔÇϸç Áß°£ °ªÀ» ÀúÀå ÇÏ´Â °ÍÀÌ ³´À» ¼ö ÀÖ´Ù. 21. YOU CAN REACH THE SAME DESTINATION IN DIFFERENT WAYS. ¸¹Àº °æ¿ì¿¡, Çϳª ÀÌ»óÀÇ SQL¹®Àº ÀǵµÇÑ °°Àº °á°ú¸¦ ÁÙ ¼ö ÀÖ´Ù. °¢°¢ÀÇ SQLÀº ´Ù¸¥ Á¢±Ù °æ·Î ¸¦ »ç¿ëÇÏ¸ç ´Ù¸£°Ô ¼öÇàÇÑ´Ù. ¿¹¸¦µé¸é, MINUS(-) »ê¼úÀÚ´Â WHERE NOT IN (SELECT ) OR ERE NOT EXISTS º¸´Ù ´õ ºü¸£´Ù. ¿¹¸¦µé¸é, STATE¿Í AREA_CODE¿¡ °¢°¢ ´Ù¸¥ À妽º°¡ °É·Á ÀÖ´Ù. À妽º¿¡µµ ºÒ±¸ÇÏ°í ´ÙÀ½ÀÇ ÁúÀÇ ´Â NOT INÀÇ »ç¿ëÀ¸·Î ÀÎÇØ Å×À̺í Àüü¸¦ Á¶»çÇϰԵȴÙ. SELECT CUSTOMER_ID FROM CUSTOMERS WHERE STATE IN ('VA', 'DC', 'MD') AND AREA_CODE NOT IN (804, 410); ±×·¯³ª °°Àº ÁúÀÇ°¡ ´ÙÀ½ ó·³ ¾²¿©Áø´Ù¸é À妽º¸¦ »ç¿ëÇÏ°Ô µÈ´Ù SELECT CUSTOMER_ID FROM CUSTOMERS WHERE STATE IN ('VA', 'DC', 'MD') MINUS SELECT CUSTOMER_ID FROM CUSTOMERS WHERE AREA_CODE IN (804, 410); WHEREÀý¿¡ ORÀ» Æ÷ÇÔÇÑ´Ù¸é OR´ë½Å¿¡ UNIONÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­, SQL ÁúÀǸ¦ ¼öÇàÇϱâ Àü¿¡ ¸ÕÀú ½ÇÇà°èȹÀ» Á¶½É½º·´°Ô Æò°¡ÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ Æò°¡´Â EXPLAIN PLAN AND TKPROF¸¦ ÀÌ ¿ëÇÏ¿© ÇÒ ¼ö ÀÖ´Ù. 22. USE THE SPECIAL COLUMNS. ROWID AND ROWNUM ¿­À» ÀÌ¿ëÇ϶ó. ROWID¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ °¡Àå ºü¸£´Ù. ¿¹¸¦µé¸é, ROWID¸¦ ÀÌ¿ëÇÑ UPDATE´Â ´ÙÀ½°ú °°´Ù. SELECT ROWID, SALARY INTO TEMP_ROWID, TEMP_SALARY FROM EMPLOYEE; UPDATE EMPLOYEE SET SALARY = TEMP_SALARY * 1.5 WHERE ROWID = TEMP_ROWID; ROWID°ªÀº µ¥ÀÌÅͺ£À̽º¿¡¼­ ¾ðÁ¦³ª °°Áö´Â ¾Ê´Ù. ±×·¡¼­, SQLÀ̳ª ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ¿ë½Ã ROWID°ª À» Àý´ëÈ­ ½ÃÅ°Áö ¸»¶ó. ¸®ÅϵǴ ÇàµéÀÇ ¼ýÀÚ¸¦ Á¦ÇÑ ½ÃÅ°±âÀ§ÇØ ROWNUMÀ» ÀÌ¿ëÇ϶ó. ¸¸¾à¿¡ ¸®ÅÏ µÇ´Â ÇàµéÀ» Á¤È®È÷ ¸ð¸¥´Ù¸é ¸®ÅϵǴ ÇàµéÀÇ ¼ýÀÚ¸¦ Á¦ÇÑÇϱâÀ§ÇØ ROWNUMÀ» »ç¿ëÇ϶ó ´ÙÀ½ÀÇ ÁúÀÇ´Â 100°³ ÀÌ»óÀÇ ÇàµéÀ» ¸®ÅÏÇÏÁö´Â ¾Ê´Â´Ù. SELECT EMPLOYE.SS#, DEPARTMENT.DEPT_NAME FROM EMPLOYEE, DEPENDENT WHERE EMPLOYEE.DEPT_ID = DEPARTMENT.DEPT_ID AND ROWNUM < 100; 23.ÇÔÃàÀûÀÎ Ä¿¼­´ë½Å ¸í½ÃÀûÀÎ Ä¿¼­¸¦ »ç¿ëÇ϶ó. ÇÔÃàÀû Ä¿¼­´Â ¿©ºÐÀÇ FETCH¸¦ ¹ß»ý½ÃŲ´Ù. ¸í½ÃÀû Ä¿¼­´Â DECLARE, OPEN, FETCH¿Í CLOSE CURSOR¹®À» »ç¿ëÇÏ¿© °³¹ßÀÚ¿¡ ÀÇÇؼ­ »ý¼ºµÈ´Ù. ÇÔÃà Ä¿¼­´Â DELETE, UPDATE, INSERT¿Í SELECT¹®À» »ç¿ëÇÏ¸é ¿À¶óŬ¿¡ ÀÇÇؼ­ »ý¼ºµÈ´Ù. 24.¿À¶óŬ º´·Ä Äõ¸® ¿É¼ÇÀ» ã¾Æ¼­ ÀÌ¿ëÇ϶ó. º´·Ä Äõ¸® ¿É¼ÇÀ» »ç¿ëÇϸé, º¸´Ù ºü¸¥ ¼º´ÉÀ¸·Î SQLÀ» º´·Ä·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ¿À¶óŬ 7¿¡¼­´Â, ¿ÀÁ÷ FULL TABLE SCAN¿¡ ±â¹ÝÇÑ Äõ¸®¸¸ÀÌ º´·Ä·Î ¼öÇàµÉ ¼ö ÀÖ´Ù. ¿À¶óŬ 8¿¡¼­´Â, À妽º°¡ ºÐÇҵǾîÀÖ´Ù¸é INDEXED RANGE SCANS¿¡ ±â¹ÝÇÑ Äõ¸®µµ º´·Ä·Î ó¸®µÉ ¼ö ÀÖ´Ù. º´·Ä Äõ¸® ¿É¼ÇÀº ´Ù¼öÀÇ µð½ºÅ© µå¶óÀ̹ö¸¦ Æ÷ÇÔÇÏ´Â SMP¿Í MPP SYSTEM¿¡¼­¸¸ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿À¶óŬ ¼­¹ö´Â ¸¹Àº ¿ì¼öÇÑ Æ¯¼ºÀ» °¡Áö°í ÀÖÁö¸¸, ÀÌ·¯ÇÑ Æ¯¼ºÀÇ Á¸À縸À¸·Î´Â ºü¸¥ ¼º´ÉÀ» º¸ÀåÇÏ Áö ¾Ê´Â´Ù. ÀÌ·¯ÇÑ Æ¯¼ºÀ» À§Çؼ­ µ¥ÀÌÅͺ£À̽º¸¦ Á¶Á¤ÇؾßÇϸç Ư¼ºÀ» ÀÌ¿ëÇϱâ À§ÇØ Æ¯º°ÇÏ°Ô SQL À» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½ÀÇ SQLÀº º´·Ä·Î ¼öÇàµÉ ¼ö ÀÖ´Ù. SELECT * --+PARALLEL(ORDERS,6) FROM ORDERS; 25.³×Æ®¿÷ ¼ÒÅë·®À» ÁÙÀÌ°í Çѹø¿¡ 󸮵Ǵ ÀÛ¾÷·®À» ´Ã·Á¶ó. ARRAY PROCESSING°ú PL/SQL BLOCKÀ» »ç¿ëÇÏ¸é º¸´Ù ³ªÀº ¼º´ÉÀ» ¾òÀ» ¼ö ÀÖ°í ³×Æ®¿÷ ¼ÒÅë·®À» ÁÙÀδÙ. ARRAY PROCESSINGÀº ÇϳªÀÇ SQL¹®À¸·Î ¸¹Àº ROW¸¦ ó¸®ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ¿¹¸¦ µé¸é, INSERT¹®¿¡¼­ ¹è¿­À» »ç¿ëÇϸé Å×ÀÌºí³»ÀÇ 1,000 ROW¸¦ »ðÀÔÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ±â¼úÀ» »ç¿ëÇϸé ÁÖ¿äÇÑ ¼º´É Çâ»óÀ» Ŭ¶óÀ̾ðÆ®/¼­¹ö¿Í ¹èÄ¡½Ã½ºÅÛ¿¡¼­ ¾ò¾îÁú ¼ö ÀÖ´Ù. º¹ÇÕ SQL¹®Àº °úµµÇÑ ³×Æ®¿÷ ¼ÒÅëÀ» À¯¹ßÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¸¸ÀÏ SQL¹®ÀÌ ´ÜÀÏ PL/SQL ºí·Ï¾È¿¡ ÀÖ´Ù¸é, Àüü ºí·ÏÀº ¿À¶óŬ ¼­¹ö¿¡ º¸³»Á®¼­ ±×°÷¿¡¼­ ¼öÇàµÇ°í, °á°ú´Â Ŭ¶óÀ̾ðÆ®ÀÇ APPLICATION¿¡°Ô µ¹¾Æ¿Â´Ù. °³¹ßÀÚ¿Í »ç¿ëÀÚ´Â Á¾Á¾ SQLÀ» µ¥ÀÌÅͺ£À̽º¿¡¼­ µ¥ÀÌÅ͸¦ °Ë»öÇÏ°í Àü¼ÛÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀ¸·Î »ç¿ë ÇÑ´Ù. ¶§¶§·Î Á÷Á¢ÀûÀ¸·Î SQLÀ» ÀÛ¼ºÇÏÁö ¾Ê°í ÄÚµå ¹ß»ý±â¸¦ »ç¿ëÇÏ¿© ÀÛ¼ºÇÑ APPLICATIONÀº ½É °¢ÇÑ ¼º´É ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù. ÀÌ·¯ÇÑ ¼º´É°¨Åð´Â µ¥ÀÌÅͺ£À̽º°¡ Ä¿Áö¸é¼­ Áõ°¡ÇÑ´Ù. SQLÀº À¯¿¬Çϱ⠶§¹®¿¡, ´Ù¾çÇÑ SQL¹®À¸·Î °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ±×·¯³ª ¾î¶² ¹®Àº ´Ù¸¥ °Íº¸ ´Ù ´õ È¿À²ÀûÀÌ´Ù. ¿©±â¿¡ ±â¼úµÈ ÆÁ°ú ±â¹ýÀ» »ç¿ëÇÏ¸é ºü¸£°Ô »ç¿ëÀÚ¿¡°Ô Á¤º¸¸¦ Á¦°øÇÒ ¼ö ÀÖ´Â APPLICATION°ú ¸®Æ÷Æ®¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ÈÞ.. ±Ü¾î¼­ ºÙ¿©³õ°í º¸´Ï±î Á¤¸» ±æ´ç.. ^^; ps. ¿À¶óŬÀ» ±âÁØÀ¸·Î ÇÑ ¼³¸íÀÌÁö¸¸, mysql¿¡¼­ sqlÀ» »ç¿ëÇÒ¶§µµ Àû¿ëµÇ´Â À̾߱âÀÔ´Ï´Ù. Ýúîî À½...db ¿¡ ´ëÇÑ ³»°øÀ» À§Çؼ­¶óµµ ²À ºÁ¾ß°Ú±º¿ä.-_-; 01/04 0:25:30 °ÅºÎ±â °¨»çÇÕ´Ï´Ù.... 01/04 0:35:36 devilhero ÀϺΠ±âº» °³³äÀº ¸ðµç µðºñ¿¡¼­ Àû¿ëÀÌ µÇ°Ú³×¿ä. ÇÏÁö¸¸ ¿À¶óŬ ¸¸ÀÇ ÃÖÀûÈ­ ¹æ¹ýÀÌ ÀÖ´Â °Í ó·³ mysqlµµ ÀÖ½À´Ï´Ù. ±× ¹æ¹ýÀº mysql.com ÀÇ document ¿¡¼­ ã¾Æ º¼ ¼ö Àִµ¥ optimize ¶õÀ» º¸¸é ÄÄÆÄÀϽúÎÅÍ Å×ÀÌºí ½ºÅ°¸¶ ±¸¼º SQL ±îÁö ÀüºÐ¾ß¿¡ °ÉÃļ­ Àß ³ª¿ÍÀÖ½À´Ï´Ù. ¿µ¾î¶ó¼­ ºÒÆíÇϽðÚÁö¸¸ ´Ù¸¥ »ç¶÷º¸´Ù MySql À» °°Àº Çϵå¿þ¾î·Î °¡Àå ºü¸£°Ô »ç¿ëÇÏ°í ½ÍÀ¸½Å ºÐÀ̶ó¸é Çѹø Àо¼¼¿ä ^^ 01/04 12:48:21 ¾Ö´Ï Ãâó : http://www.coolzzin.com ÀÌ ±ÛÀº SURESH AIYER¶ó´Â »ç¶÷ÀÌ ¾´ ±Û·Î ¿À¶óŬ¿¡¼­ SQLÀ» È¿°úÀûÀ¸·Î ÀÛ¼º Çϱâ À§ÇÑ ¿øÄ¢°ú ±â¹ýÀ» 25°¡Áö·Î Á¤¸®Çؼ­ DATABASE PROGRAMMING & DESIGN 2002³âµµ 1¿ùÈ£¿¡ ¾´ ±ÛÀÔ´Ï´Ù. ´Ù¸¥°÷ÀÌ Ãâó·Î µÇ¾îÀִ°Š°°¾Æ¼­ ¿ø¹® ÁÖ¼Ò ¿Ã¸³´Ï´Ù. 01/04 13:30:14 Â÷â ÁÁÀº ÀÚ·áÀÔ´Ï´Ù °¨»ç ^^ 01/13 11:19:10 ÀÌ ¸§ ºñ¹Ð¹øÈ£ °ü·Ã±Û : 0 °Ç ±Û¾´½Ã°£ : 03/01/04 0:04