HOME   ·Î±×ÀΠ  ȸ¿ø°¡ÀÔ
    
ȸ¿ø°¡ÀÔ
ºñ¹Ð¹øÈ£ ã±â ÀÚµ¿·Î±ä
ÀÌÀü°Ô½ÃÆÇ
   free_board
   °Ç°­°Ô½ÃÆÇ
   ¿À¶óŬDB
   Linux
   HTML/javascript
   Áú¹®°ú ´ä
È£¼­±â
   À̹ÌÁö°Ô½ÃÆÇ  
   °Ç°­°Ô½ÃÆÇ  
   À½¾ÇÀÚ·á  
   ¼ºÁØÀÌ °Ô½ÃÆÇ  
[ÀϹÝ] [¿À¶óŬƩ´×] SQL¹® È¿°úÀûÀ¸·Î ÀÛ¼ºÇϱâ À§ÇÑ 25°¡Áö ¹æ¹ý
  È£¼® ´Ô²²¼­ ¾´ ±ÛÀÔ´Ï´Ù - 211.¢½.74.31 ÀÐÀ½:4163  
SQL¹® È¿°úÀûÀ¸·Î ÀÛ¼ºÇϱâ À§ÇÑ 25°¡Áö ¹æ¹ý | PostgreSQL 2005/05/23 11:30

http://blog.naver.com/chickling/140013198182

¡á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´Â ½ÇÁ¦ PERFORMANCEÀÇ Åë°èÄ¡¸¦ º¸¿©ÁØ´Ù. ÀÌ 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 WHERE 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°ú ¸®Æ÷Æ®¸¦ ¾òÀ» ¼ö ÀÖ´Ù.


¸ñ·Ï

ºÐ·ù ¼±ÅÃ
27 ÀÏ¹Ý    Linux Oralcle <-> MS SQL 2000 È£¼® 05-11-11 3718
26 ÀÏ¹Ý [¿À¶óŬƩ´×] shared_pool_size sga ¿µ¿ªÀÇ ¼öÁ¤ È£¼® 05-11-08 5158
25 ÀÏ¹Ý PHP¿Í ¿À¶óŬÀÇ ÃÖÀûÈ­ ÇÁ·Î±×·¡¹Ö È£¼® 05-11-04 5855
24 ÀÏ¹Ý [¿À¶óŬƩ´×] Æ©´×Á¤¸®( ÀÌÈ£Çö ) È£¼® 05-11-02 4405
ÀÏ¹Ý [¿À¶óŬƩ´×] SQL¹® È¿°úÀûÀ¸·Î ÀÛ¼ºÇϱâ À§ÇÑ 25°¡Áö ¹æ¹ý È£¼® 05-11-02 4164
22 ÀÏ¹Ý [¿À¶óŬƩ´×]À¯¿ëÇÑ ¿À¶óŬ tuning scripts (2) È£¼® 05-11-02 3932
21 ÀÏ¹Ý [¿À¶óŬƩ´×]À¯¿ëÇÑ ¿À¶óŬ tuning scripts (1) È£¼® 05-11-02 4220
20 ÀÏ¹Ý [¿À¶óŬƩ´×] SGA ³»ÀÇ Á¡À¯µÈ ¸Þ¸ð¸® ¿µ¿ªÀÇ Å©±â°è»ê È£¼® 05-11-02 3569
19 ÀÏ¹Ý [¿À¶óŬƩ´×] BIND º¯¼ö¸¦ »ç¿ëÇÑ Äõ¸®¹® ±¸¼º È£¼® 05-11-02 4895
18 ÀÏ¹Ý [¿À¶óŬƩ´×] È°¿ë (Åäµå¿¡¼­ kill/trace º¸´Â ¹æ¹ý) È£¼® 05-11-02 4328
17 ÀÏ¹Ý Sql Tuning - TKPROF È°¿ëÇϱâ È£¼® 05-11-01 3482
16 ÀÏ¹Ý PRO*C ¿¡¼­ ¶Ç´Â sqlplus ¿¡¼­ ¶óÀ̺귯¸® ¿¡·¯°¡ ¹ß»ý½Ã ȯ°æÆÄÀÏ Ãß°¡ È£¼® 05-10-28 3752
15 ÀÏ¹Ý DBMS_JOBÀÇ È°¿ë - ¿À¶óŬ Àâ¸Å´ÏÀú È£¼® 05-10-26 8267
  ÀÏ¹Ý    DBMS_JOBÀÇ È°¿ë - ¿À¶óŬ Àâ¸Å´ÏÀú È£¼® 05-10-28 3827
  ÀÏ¹Ý    DBMS_JOBÀÇ È°¿ë - ÀâÅ¥ÀÇ È®ÀÎ ¹× ½ÃÀÛ ¹× Á¦°Å È£¼® 05-10-31 3944
óÀ½ÀÌÀü  [1] [2] [3] [4] [5] [6] [7] [8] 9 [10]  ´ÙÀ½¸Ç³¡

 
Copyright © zenos.pe.kr. All rights reserved.