¾Æ½º¶óÀÌ¿Í Àλý¿ªÀü

ºÎÁ¦¸ñÀÌ ¾ø½À´Ï´Ù.



  • today
  • 0
  • total
  • 14360
  • ´ä±Û
  • 49
  • ½ºÅ©·¦
  • 6

ºí·Î±× ±¸µ¶Çϱâ



hint »ç¿ë¹æ¹ý 3 Tip

http://home.ditco.com/~angel/Basic/EXT07/ext07.html

 

Hints (Ãâó-Oracle8.0 Tuning Guide)

 

* Á¤¸®»óÀÇ ¿À·ù°¡ ÀÖÀ»¼ö ÀÖÀ¸¹Ç·Î ¿ø¼­ ÂüÁ¶¹Ù¶÷.

 

A. initialization parameterÁß OPTIMIZER_MODE ÁöÁ¤°¡´É °ª

 

1.ALL_ROWS

Goal : Best Throughput

¿ëµµ : Àüü RESOURCE ¼Òºñ¸¦ ÃÖ¼ÒÈ­ ½ÃÅ°±â À§ÇÑ ÈùÆ®.

Cost-Based Á¢±Ù¹æ½Ä.

 

¿¹ : SELECT /*+ALL_ROWS */ EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;

 

2.FIRST_ROWS

Goal : Best Response Time

¿ëµµ : Á¶°Ç¿¡ ¸Â´Â ù¹ø° row¸¦ ¸®ÅÏÇϱâ À§ÇÑ Resource

¼Òºñ¸¦ ÃÖ¼ÒÈ­ ½ÃÅ°±âÀ§ÇÑ ÈùÆ®.

Cost-Based Á¢±Ù¹æ½Ä.

Ư¡ : - Index Scan ÀÌ °¡´ÉÇÏ´Ù¸é Optimizer°¡ Full Table Scan ´ë½Å

Index ScanÀ» ¼±ÅÃÇÑ´Ù.

- Index Scan ÀÌ °¡´ÉÇÏ´Ù¸é Optimizer°¡ Sort-Merge º¸´Ù

Nested Loop À» ¼±ÅÃÇÑ´Ù.

- Order ByÀý¿¡ÀÇÇØ Index Scan ÀÌ °¡´ÉÇÏ´Ù¸é,

Sort°úÁ¤À» ÇÇÇϱâÀ§ÇØ Index ScanÀ» ¼±ÅÃÇÑ´Ù.

- Delete/Update Block ¿¡¼­´Â ¹«½ÃµÈ´Ù.

- ´ÙÀ½À» Æ÷ÇÔÇÑ Select ¹®¿¡¼­µµ Á¦¿ÜµÈ´Ù.

ÁýÇÕ¿¬»êÀÚ (Union,Intersect,Minus,Union All)

Group By

For UpDate

Group ÇÔ¼ö

Distinct

 

¿¹ : SELECT /*+FIRST_ROWS */ EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;

 

3.CHOOSE

Goal : AcessµÇ´Â Å×ÀÌºí¿¡ Åë°èÄ¡ Á¸Àç¿©ºÎ¿¡ µû¶ó

Optimizer·Î ÇÏ¿©±Ý Rule-Based Approach¿Í Cost-Based Approach

Áß Çϳª¸¦ ¼±ÅÃÇÒ¼ö ÀÖ°Ô ÇÑ´Ù.

¿ëµµ : Data Dictionary°¡ ÇØ´çÅ×ÀÌºí¿¡ ´ëÇØ Åë°èÁ¤º¸¸¦ °¡Áö°í ÀÖ´Ù¸é

Optimizer´Â Cost-Based Approach¸¦ ¼±ÅÃÇÏ°í,

±×·¸Áö ¾Ê´Ù¸é Rule-Based Approach¸¦ ¼±ÅÃÇÑ´Ù.

 

¿¹ : SELECT /*+CHOOSE */ EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;

 

4.RULE

¿ëµµ : Rule-Based ÃÖÀûÈ­¸¦ »ç¿ëÇϱâÀ§ÇØ.

 

¿¹ : SELECT /*+RULE */ EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;

 

B. Access Methods ·Î½áÀÇ Hints

 

1.FULL

¿ëµµ : ÇØ´çÅ×À̺íÀÇ Full Table ScanÀ» À¯µµ.

 

¿¹ : SELECT /*+FULL(EMP) */ EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;

* Å×À̺í Alias °¡ Àִ°æ¿ì´Â Alias»ç¿ë.

Schema NameÀº »ç¿ë¾ÈÇÔ(From ¿¡ SCOTT.EMP ¶ó°í ±â¼úÇصµ hint¿¡´Â EMP»ç¿ë).

 

2.ROWID

¿ëµµ : ÁöÁ¤µÈ Å×À̺íÀÇ ROWID¸¦ ÀÌ¿ëÇÑ Scan À¯µµ

 

3.CLUSTER

¿ëµµ : ÁöÁ¤µÈ Å×À̺íAccess¿¡ Cluster Scan À¯µµ.

ClusterµÈ Objects¿¡¸¸ Àû¿ë°¡´É.

 

¿¹ : SELECT /*+CLUSTER(EMP) */ ENAME,DEPTNO

FROM EMP,DEPT

WHERE DEPTNO = 10

AND EMP.DEPTNO = DEPT.DEPTNO;

 

4.HASH

¿ëµµ : ÁöÁ¤µÈ Å×À̺íAccess¿¡ HASH Scan À¯µµ.

/*+HASH(table) */

 

5.HASH_AJ

¿ëµµ : NOT IN SubQuery ¸¦ HASH anti-joinÀ¸·Î º¯Çü

/*+HASH_AJ */

 

6.HASH_SJ

¿ëµµ : correlated Exists SubQuery ¸¦ HASH semi-joinÀ¸·Î º¯Çü

/*+HASH_SJ */

 

7.INDEX

¿ëµµ : ÁöÁ¤µÈ Å×À̺íAccess¿¡ Index Scan À¯µµ.

* ÇϳªÀÇ index¸¸ ÁöÁ¤µÇ¸é optimizer´Â ÇØ´çindex¸¦ ÀÌ¿ë.

* ¿©·¯°³ÀÇ À妽º°¡ ÁöÁ¤µÇ¸é optimizer°¡ °¢ indexÀÇ

scan½Ã cost¸¦ ºÐ¼® ÇÑ ÈÄ ÃÖ¼Òºñ¿ëÀÌ µå´Â index»ç¿ë.

°æ¿ì¿¡ µû¶ó optimizer´Â ¿©·¯ index¸¦ »ç¿ëÇÑ ÈÄ °á°ú¸¦

mergeÇÏ´Â acees¹æ½Äµµ ¼±ÅÃ.

* index°¡ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é optimizer´Â Å×À̺íÀÇ ÀÌ¿ë°¡´ÉÇÑ

¸ðµç index¿¡ ´ëÇØ scan cost¸¦ °í·ÁÈÄ ÃÖÀúºñ¿ëÀÌ µå´Â

index scanÀ» ¼±ÅÃÇÑ´Ù.

¿¹ : SELECT /*+INDEX(EMP EMPNO_INDEX) */ EMPNO,ENAME

FROM EMP

WHERE DEPTNO=10

 

8.INDEX_ASC

¿ëµµ : INDEX HINT¿Í µ¿ÀÏ ´Ü,ASCENDING À¸·Î SCANÇÔÀ» È®½ÇÈ÷ ÇϱâÀ§ÇÔ.

 

9.INDEX_COMBINE

¿ëµµ : INDEX¸íÀÌ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é OPTIMIZER´Â ÇØ´ç Å×À̺íÀÇ

best cost ·Î ¼±ÅÃµÈ Boolean combination index ¸¦ »ç¿ëÇÑ´Ù.

index ¸íÀÌ ÁÖ¾îÁö¸é ÁÖ¾îÁø ƯÁ¤ bitmap index ÀÇ

boolean combination ÀÇ »ç¿ëÀ» ½ÃµµÇÑ´Ù.

 

/*+INDEX_COMBINE(table index) */

 

10.INDEX_DESC

¿ëµµ : ÁöÁ¤µÈ Å×À̺íÀÇ ÁöÁ¤µÈ index¸¦ ÀÌ¿ë descendingÀ¸·Î scan

ÇÏ°íÀÚÇÒ¶§ »ç¿ë.

 

/*+INDEX_DESC(table index) */

 

11.INDEX_FFS

¿ëµµ : full table scanº¸´Ù ºü¸¥ full index scanÀ» À¯µµ.

 

/*+INDEX_FFS(table index) */

 

12.MERGE_AJ

¿ëµµ : not in subquery¸¦ merge anti-joinÀ¸·Î º¯Çü

 

/*+MERGE_AJ */

 

13.MERGE_SJ

¿ëµµ : correalted EXISTS subquery¸¦ merge semi-joinÀ¸·Î º¯Çü

 

/*+MERGE_SJ */

 

14.AND_EQUAL

¿ëµµ : single-column indexÀÇ merge¸¦ ÀÌ¿ëÇÑ access path ¼±ÅÃ.

Àû¾îµµ µÎ°³ÀÌ»óÀÇ index°¡ ÁöÁ¤µÇ¾î¾ßÇÑ´Ù.

 

/*+AND_EQUAL(table index1,index2...) */

 

15.USE_CONCAT

¿ëµµ : Á¶°ÇÀýÀÇ OR ¸¦ Union ALL Çü½ÄÀ¸·Î º¯ÇüÇÑ´Ù.

ÀϹÝÀûÀ¸·Î º¯ÇüÀº ºñ¿ëÃø¸é¿¡¼­ È¿À²ÀûÀ϶§¸¸ ÀϾ´Ù.

 

/*+USE_CONCAT */

 

 

C. JOIN ¼ø¼­¸¦ °áÁ¤ÇÏ´Â Hints

 

1.ORDERED

¿ëµµ : fromÀý¿¡ ±â¼úµÈ Å×ÀÌºí ¼ø¼­´ë·Î joinÀÌ ÀϾµµ·Ï À¯µµ.

 

/*+ORDERED */

¿¹ : SELECT /*+ORDERED */ TAB1.COL1,TAB2.COL2,TAB3.COL3

FROM TAB1,TAB2,TAB3

WHERE TAB1.COL1=TAB2.COL1

AND TAB2.COL1=TAB3.COL1;

 

2.STAR

¿ëµµ : STAR QUERY PLANÀÌ »ç¿ë°¡´ÉÇÏ´Ù¸é À̸¦ ÀÌ¿ëÇϱâÀ§ÇÑ HINT.

STAR PLANÀº ±Ô¸ð°¡ °¡ÀåÅ« Å×À̺íÀÌ QUERY¿¡¼­ JOIN ORDER»ó

¸¶Áö¸·À¸·Î À§Ä¡ÇÏ°Ô ÇÏ°í NESTED LOOP À¸·Î JOINÀÌ ÀϾµµ·Ï

À¯µµÇÑ´Ù.

Àû¾îµµ 3°³ Å×À̺í ÀÌ»óÀÌ Á¶Àο¡ Âü¿©ÇؾßÇϸç LARGE TABLEÀÇ

CONCATENATED INDEX´Â ÃÖ¼Ò 3Ä÷³ ÀÌ»óÀ» INDEX¿¡ Æ÷ÇÔÇؾßÇÑ´Ù.

Å×À̺íÀÌ ANALYZE µÇ¾î ÀÖ´Ù¸é OPTIMIZER°¡ °¡ÀåÈ¿À²ÀûÀÎ STAR PLANÀ»

¼±ÅÃÇÑ´Ù.

 

/*+STAR */

 

D. JOIN OPERATIONÀ» °áÁ¤ÇÏ´Â HINTS.

 

1.USE_NL

¿ëµµ : Å×À̺íÀÇ JOIN ½Ã Å×À̺íÀÇ °¢ ROW°¡ INNER Å×À̺íÀ» NESTED LOOP

Çü½ÄÀ¸·Î JOIN ÇÑ´Ù.

 

/*+USE_NL(inner_table) */

 

¿¹ : SELECT /*+ORDERD USE_NL(CUSTOMER) */

FROM ACCOUNT.BALANCE,CUSTOMER.LAST_NAME,CUSTOMER.FIRST_NAME

WHERE ACCOUNT.CUSTNO = CUSTOMER.CUSTNO;

 

2.USE_MERGE

¿ëµµ : ÁöÁ¤µÈ Å×À̺íµéÀÇ Á¶ÀÎÀÌ SORT-MERGEÇü½ÄÀ¸·Î ÀϾµµ·Ï À¯µµ.

 

/*+USE_MERGE(table) */

* °ýÈ£¾ÈÀÇ Å×À̺íÀº JOIN ORDER»óÀÇ µÚÀÇ Å×À̺í(?)

 

3.USE_HASH

¿ëµµ : °¢ Å×ÀÌºí°£ HASH JOINÀÌ ÀϾµµ·Ï À¯µµ.

 

/*+USE_HASH(table) */

* °ýÈ£¾ÈÀÇ Å×À̺íÀº JOIN ORDER»óÀÇ µÚÀÇ Å×À̺í(?)

 

4.DRIVING_SITE

¿ëµµ : QUERYÀÇ ½ÇÇàÀÌ ORACLE¿¡ ÀÇÇØ ¼±ÅÃµÈ SITE°¡ ¾Æ´Ñ ´Ù¸¥ SITE¿¡¼­

ÀϾµµ·Ï À¯µµ.

 

/*+DRIVING_SITE(table) */

¿¹ : SELECT /*+DRIVING_SITE(DEPT) */

FROM EMP,DEPT@RSITE

WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

DRIVING_SITE ÈùÆ®¸¦ ¾È¾²¸é DEPTÀÇ ROW°¡ LOCAL SITE·Î º¸³»Á®

LOCAL SITE¿¡¼­ JOINÀÌ ÀϾÁö¸¸,

DRIVING_SITE ÈùÆ®¸¦ ¾²¸é EMPÀÇ ROWµéÀÌREMOTE SITE·Î º¸³»Á®

QUERY°¡ ½ÇÇàµÈÈÄ LOCAL SITE·Î °á°ú°¡ RETURNµÈ´Ù.



ÁÖÁ¦ : ¿©°¡/»ýÈ°/IT > ÄÄÇ»ÅÍ/ÀÎÅͳÝ

¡ãtop


¼­¹ö°ü¸®ÀÚ¿Í °³¹ßÀÚ¸¦ À§ÇÑ Æ©´×°¡À̵å Tip


°³¹ßÀÚ°¡ ¹üÇϱ⠽¬¿î Æ©´× À̽´ 10°¡Áö À¯Çü ºÐ¼® Tip

°³¹ßÀÚ°¡ ¹üÇϱ⠽¬¿î Æ©´× À̽´ 10°¡Áö À¯Çü ºÐ¼®

 

¹Ú ¼º ¿ì
dont4get@chol.com


Çö¿µ¾¾½ºÅÛÁî¿Í LG-CNS¸¦ °ÅÃÄ ÇöÀç´Â ¼ö·ÎÅØ ¿¬±¸¼Ò ÆÀÀåÀ¸·Î ÀÏÇÏ°í ÀÖ´Ù. ÅÂÆò¾ç ÆǸŠ¹°·ù °³¹ß, KT-ICIS ¿ä±Ý°ü¸®½Ã½ºÅÛ ÇÁ·ÎÁ§Æ® DBA, KTF-Â÷¼¼´ë ºô¸µ ÇÁ·ÎÁ§Æ® DBA, ÅëÇÕ Çϼö°ü°Å À¯Áö°ü¸® SW °³¹ß ÆÀÀåÀ¸·Î È°µ¿Çß´Ù.


Áö³­ 2ȸ¿¡ °ÉÃÄ ±âº»À» Æ°Æ°È÷ ÇÏÀÚ´Â Àǹ̿¡¼­ ½¬¿î ¿¹Á¦¸¦ Áß½ÉÀ¸·Î ÁÖ·Î Ç÷£(PLAN)À» ÀÛ¼ºÇÏ°í Çص¶ÇÏ´Â µ¥ ÁÖ·ÂÇß´Ù. Áö³­ °­Á¸¸ Àڱ⠰ÍÀ¸·Î ¸¸µé¾ú´Ù¸é Àû¾îµµ Æ©´× ºÎ¹®¿¡¼­´Â À¢¸¸ÇÑ Æò¹üÇÑ DBA´Â ´É°¡ÇÒ ¼ö ÀÖ´Ù. À̹ø¿¡´Â Áö±Ý±îÁö °³¹ßÀÚµéÀÌ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ´À¸®´Ù°í ã¾Æ¿À´Â °¡Àå ¸¹Àº À¯ÇüÀ» 10°¡Áö Á¤µµ·Î ¿ä¾àÇØ ¼³¸íÇÏ°íÀÚ ÇÑ´Ù. ÇÊÀÚ°¡ 10³â µ¿¾È DBA ¾÷¹«¸¦ Çϸ鼭 ÀÌ 10°¡Áö À¯ÇüÀ» Á¦¿ÜÇÏ°í ´À¸° °æ¿ì´Â 10% ¹Ì¸¸À̾ú´Ù. 10% ¹Ì¸¸Àº ÇÁ·Î±×·¥ ±¸Á¶ Á¶Á¤ ¹× ÇÁ·Î¼¼½ºÀÇ Á¶Á¤À» ÅëÇÑ ´ë´ëÀûÀÎ Æ©´× ÀÛ¾÷ÀÌ ÀÌ·ïÁ®¾ß ÇÑ´Ù. ÀÌ·± °æ¿ì´Â ÁøÂ¥ Æ©´× Àü¹®°¡¿¡°Ô ¸Ã°Ü¶ó. 90%¸¸ °³¹ßÀÚµéÀÌ ½Å°æ½á¼­ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥À» Æ©´×ÇÑ´Ù¸é ÇÁ·ÎÁ§Æ®¿¡¼­ ¾öû³² È¿°ú°¡ ³ªÅ¸³­´Ù.


2ȸºÐ ÁٰŸ®

Áö³­ ȸ¸¦ °£´ÜÇÏ°Ô ²À ¾Ë¾Æ¾ß ÇÒ ºÎºÐ¸¸ ¿ä¾àÇØ º»´Ù. ¸î ¹øÀ» °­Á¶Çصµ Áö³ªÄ§ÀÌ ¾ø´Â ºÎºÐÀÌ´Ù.

1ȸ
¿ÉƼ¸¶ÀÌÀú¿¡´Â ·ê ±â¹Ý°ú ºñ¿ë ±â¹ÝÀÇ ¿ÉƼ¸¶ÀÌÀú°¡ ÀÖÀ¸¸ç Ç÷£ ÀÛ¼º¹ý¿¡´Â ´ÙÀ½ÀÇ ³× °¡Áö°¡ ÀÖ´Ù.
1. SQLPLUSÀÇ Autotrace ±â´É È°¿ë
2. EXPLAIN ¸í·É°ú Ç÷£ Å×À̺í Á¶È¸
3. tkprof À¯Æ¿¸®Æ¼ È°¿ë ¹æ¹ý : °¡Àå ÀÚ¼¼È÷ º¼ ¼ö ÀÖ´Â ¹æ¹ý
4. Æ©´× ÅøÀ» ÅëÇØ Á¶È¸ÇÏ´Â ¹æ¹ý

2ȸ
Æ©´×Àº ÇÁ·Î±×·¥À» ºü¸£°Ô Çϱâ À§ÇÑ Æ©´× Àü¹®°¡ÀÇ ³ë·ÂÀÌ ¾Æ´Ñ Á¦ÇÑµÈ ÀÚ¿øÀ¸·Î ¼³Á¤µÈ ¸ñÇ¥ ½Ã°£ ³»¿¡ Á¤È®ÇÑ °á°ú¸¦ Áö¼ÓÀû, ¾ÈÁ¤ÀûÀ¸·Î ³»±â À§ÇÑ ÇÁ·Î±×·¡¸ÓÀÇ ¸ðµç ³ë·ÂÀÌ´Ù. µû¶ó¼­ Á¤È®¼º, ½Å¼Ó¼º, ¿î¿µÀÇ ÆíÀ̼º, Àå¾Ö ´ëó¼º, ÀÚ¿ø È°¿ë¼º, °¡µ¶¼º, À̽ļºÀÇ ¸ðµç Ãø¸éÀÌ °í·ÁµÅ¾ß ÇÑ´Ù. ±×¸®°í ·ê ±â¹Ý ¿ÉƼ¸¶ÀÌÀúÀÇ ¿ì¼± ¼øÀ§¿¡ µû¶ó Á¢±Ù °æ·Î¸¦ Ç÷£ ÀÛ¼ºÀ» À§ÁÖ·Î ÃßÀûÇÏ¿© º¸¾Ò´Ù.


1 À妽º¸¦ ¿Ö ¾È Ÿ³ª¿ä

 

Æ©´×¿¡¼­ ¿ª½Ã °¡Àå ¸¹Àº ¹®Á¦¸¦ ÀÏÀ¸Å°´Â °ÍÀº À妽ºÀÇ À߸øµÈ È°¿ëÀÌ´Ù. ¶ÇÇÑ °³¹ßÀÚµé ´ëºÎºÐ ´À¸®´Ù°í »ý°¢µÇ¸é À妽º¸¦ Àß »ç¿ëÇÏ°í ÀÖ´ÂÁö¸¦ °ËÅäÇÑ´Ù. À妽º¸¦ »ç¿ëÇÑ´Ù°í ¹«Á¶°Ç »¡¶óÁö´Â °ÍÀº ¾Æ´ÏÁö¸¸ À妽ºÀÇ ¿Ã¹Ù¸¥ È°¿ëÀº SQL Æ©´×ÀÇ Ã¹ ½ÃÀÛÀÓÀº ºÐ¸íÇÏ´Ù. ƯÈ÷ OLTP¼º ¾÷¹«¿¡¼­´Â À妽º È°¿ëÀÌ Áß¿äÇÏ´Ù. Çϳª¾¿ °æ¿ìÀÇ ¼ö¸¦ ³ª¿­ÇØ º¸ÀÚ.


À妽º°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì(À妽º ±¸Á¶¸¦ º¼ ÁÙ ¸ð¸£´Â »ç¶÷À» À§ÇØ)

 

¿ì¹®Çö´äÀ̶ó°í ÇÒ±î? À妽º°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ´ç¿¬È÷ À妽º¸¦ ŸÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ¸¹Àº °³¹ßÀÚ´Â ÇØ´ç Å×ÀÌºí¿¡ À妽º°¡ Á¸ÀçÇÏ´ÂÁö, ¾î¶² Ä÷³À¸·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö ¾ËÁö ¸øÇÑ´Ù. ½ÉÁö¾î OCP ÀÚ°ÝÁõÀ» °¡Áø °³¹ßÀÚµµ ÀÌ·± °æ¿ì°¡ ÀÖ´Ù. Áö³­ ȸ¿¡ °£·«ÇÏ°Ô ¼³¸íÇÏ¿´Áö¸¸ USER_INDEXES, USER_IND_COLUMNS¶ó´Â µñ¼Å³Ê¸®¿¡ ÇØ´ç °èÁ¤¿¡¼­ ¸¸µç À妽º ¹× À妽º Ä÷³À» Á¶È¸ÇÒ ¼ö ÀÖ´Ù. ¿©±â±îÁö´Â °³¹ßÀÚµéÀÌ ´ëºÎºÐ ¾Ë °ÍÀ̶ó »ý°¢ÇÑ´Ù.


<È­¸é 1>ÀÚ½ÅÀÇ °èÁ¤¿¡ »ý¼ºµÈ Å×À̺íÀÇ À妽º¸¦ Á¶È¸ÇÏ´Â È­¸é


ÇÏÁö¸¸ ´ëºÎºÐ ÇÁ·ÎÁ§Æ®¿¡¼­ °³¹ßÀÚ °èÁ¤¿¡ Å×À̺íÀ» ¸¸µé¾î ÁÖ´Â °æ¿ì´Â ¾ø´Ù. DBA °èÁ¤¿¡ Å×À̺íÀ» ¸¸µé°í ½Ã³ë´Ô(synonym)À̳ª ºä(view)¸¦ ÅëÇØ °³¹ßÀÚ¿¡°Ô ±ÇÇÑÀ» ÁÖ°Ô µÈ´Ù. SCOTT ¸»°í SYSTEM °èÁ¤À¸·Î ·Î±äÇÑ ´ÙÀ½ ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇØ º¸ÀÚ.

<È­¸é 2> ´Ù¸¥ °èÁ¤¿¡¼­ ½Ã³ë´ÔÀ¸·Î ¿¬°áµÇ´Â ¿¹Á¦ È­¸é

ÀÌ ´ÙÀ½ SELECT * FROM EMP;¸¦ ½ÇÇàÇϸé ÀÌÀü°ú °á°ú´Â °°À» °ÍÀÌ´Ù. ÇÏÁö¸¸ SELECT * FROM USER_INDEXES WHERE TABLE_NAME = ¡®EMP¡¯ÇÏ¸é ¾Æ¹« À妽ºµµ ¾ø´Ù°í ³ª¿Ã °ÍÀÌ´Ù. ¹°·Ð SELECT * FROM USER_TABLES WHERE TABLE_NAME = ¡®EMP¡¯Çصµ Å×À̺íÀº ¾øÀ» °ÍÀÌ´Ù. <È­¸é 2>ÀÇ ÀÛ¾÷À» º»ÀÎÀÌ ÇÏÁö ¾Ê¾ÒÀ» °æ¿ì¿¡ ¾î¶² °èÁ¤ÀÇ Å×À̺í·Î ½Ã³ë´ÔÀÌ »ý¼ºµÇ¾î ÀÖ´ÂÁö ¸ð¸£´Â °³¹ßÀÚ°¡ ÀÇ¿Ü·Î ¸¹´Ù.
ÀÏ´Ü SELECT OBJECT_TYPE FROM ALL_OBJECTS WHERE OBJECT_NAME = ¡®EMP¡¯ÇÏ¿© EMP°¡ Å×À̺íÀÎÁö ºäÀÎÁö ½Ã³ë´ÔÀÎÁö¸¦ È®ÀÎÇÑ ÈÄ ÀÌ¿¡ ÇØ´çÇÏ´Â Å×À̺íÀ» ã¾Æ°¡¸é µÈ´Ù.
½Ã³ë´ÔÀÏ °æ¿ì¿¡´Â SELECT TABLE_OWNER, TABLE_NAME FROM USER_SYNONYMS WHERE SYNONYM_NAME = ¡®EMP¡¯¶ó°í Çؼ­ ÇØ´ç Å×À̺íÀÇ ¿À³Ê¿Í Å×À̺í¸íÀ» ãÀ¸¸é µÈ´Ù. ¸¸¾à¿¡ ½Ã³ë´ÔÀÌ PUBLICÀ¸·Î µÇ¾î ÀÖÀ¸¸é ALL_SYNONYMS¸¦ ã¾Æ ¿À³Ê°¡ ¡®PUBLIC¡¯ÀÎ °ÍÀ» ãÀ¸¸é µÈ´Ù.


À妽º°¡ Á¸ÀçÇϴµ¥µµ À妽º¸¦ È°¿ë ¸øÇÏ´Â °æ¿ì
  • ù ¹ø° Ä÷³¿¡ Á¶°ÇÀ» ÁÖÁö ¾ÊÀº °æ¿ì
    Áö³­ È£¿¡µµ ¼³¸íÇßµí ù ¹ø° Ä÷³¿¡ = ¶Ç´Â LILE, > Á¶°Ç µîÀ» ±â¼úÇØ¾ß ÇÑ´Ù. 10°³ Ä÷³À¸·Î ±¸¼ºµÈ °áÇÕ À妽º°¡ ÀÖ¾î 9°³ Ä÷³¿¡ = Á¶°ÇÀ» ÁÖ´õ¶óµµ ù ¹ø° Ä÷³ Á¶°ÇÀÌ ºüÁø´Ù¸é ÀÌ À妽º´Â ÀÖÀ¸³ª¸¶³ª ÇÑ °ÍÀÌ´Ù. À妽º¶õ B-Æ®¸® ÇüÅ·ΠÁ¤·ÄµÈ ¼ø¼­¸¦ °¡Áö°í ÀÖ´Ù. ÀÌ ¼ø¼­¸¦ °¡Áö°í ¾×¼¼½º¸¦ ÇÏ¿© ÇØ´ç ¹üÀ§°¡ ÃÊ°úµÇ¸é °Ë»öÀ» Áß´ÜÇÑ´Ù. ±×·¯¹Ç·Î À妽º¸¦ ±¸¼ºÇÏ´Â Ä÷³ ¼ø¼­´ë·Î Á¶°ÇÀÌ ¸¹ÀÌ ÁÖ¾îÁú¼ö·Ï ÁÁÀº °á°ú¸¦ ³½´Ù. Áß°£¿¡ Çϳª¶óµµ ºüÁö°Ô µÇ¸é µÚ ¼ø¼­ÀÇ Á¶°ÇÀº À妽º¿Í´Â ¹«°üÇÏ°Ô Ã¼Å© Á¶°ÇÀÌ µÉ »ÓÀÌ´Ù.
    À妽º¸¦ ÅëÇØ °Ë»ö Á¶°ÇÀ» ÁÙ¿©ÁÖ´Â Ä÷³À» ¡®À妽º È°¿ë Ä÷³¡¯À̶ó ÇÏ°í, °Ë»ö Á¶°ÇÀ» ÁÙ¿©ÁÖÁö ¸øÇÏ°í µ¥ÀÌÅ͸¦ ÃßÃâÇϴ üũ Á¶°Ç¸¸ µÉ ¶§ À̸¦ ¡®µ¥ÀÌÅÍ Ã¼Å© Ä÷³¡¯À̶ó Á¤ÀÇÇÑ´Ù(<Ç¥ 1>).


±¸¼º Ä÷³ Á¶ °Ç ºñ ±³
À妽º Ä÷³
¨ç ¸ÅÀå ÄÚµå
¨è ÆǸŠÀÏÀÚ
¨é Á¦Ç° ÄÚµå
ù ¹ø° Ä÷³ Á¶°ÇÀÌ ´©¶ôµÈ °æ¿ì
WHERE ÆǸŠÀÏÀÚ = ¡®20030618'
AND Á¦Ç° ÄÚµå = ¡®50001¡¯
À妽º È°¿ë ¸øÇÔ
ÆǸŠÀÏÀÚ, Á¦Ç° ÄÚµå´Â ´ÜÁö µ¥ÀÌÅÍ Ã¼Å© Ä÷³
=> Àüü µ¥ÀÌÅÍ ´Ù ÀÐÀ½
* Áß°£ Ä÷³ Á¶°ÇÀÌ ´©¶ôµÈ °æ¿ì
WHERE ¸ÅÀåÄÚµå = ¡®R2001¡¯
좥ND Á¦Ç° ÄÚµå = ¡®50001¡¯
À妽º È°¿ë °¡´É
=> ¸ÅÀå ÄÚµå : À妽º È°¿ë Ä÷³
=> Á¦Ç° ÄÚµå : µ¥ÀÌÅÍ Ã¼Å© Ä÷³
ÆǸŠÀÏÀÚÀÇ Á¶°ÇÀÌ ´©¶ôµÊ¿¡ µû¶ó ¸ÅÀå ÄÚµå Á¶°Ç¿¡ ÀÇÇØ ¸ðµÎ µ¥ÀÌÅÍ°¡ ÀоîÁö¸é¼­ Á¦Ç° ÄÚµå´Â µ¥ÀÌÅ͸¦ °¡Áö°í ¿Ã °ÍÀΰ¡¸¦ üũÇÏ´Â Á¶°Ç¸¸ µÈ´Ù.
* ù ¹ø쨰 Ä÷³ Á¶°ÇÀÌ ¡®=¡¯ÀÌ ¾Æ´Ñ °æ¿ì
WHERE ¸ÅÀå ÄÚµå = ¡®R2%¡¯
¡¡좥ND ÆǸŠÀÏÀÚ = ¡®20030618¡¯
AND Á¦Ç° ÄÚµå = ¡®50001¡¯
À妽º È°¿ë °¡´É
=> ¸ÅÀåÄÚµå : À妽º È°¿ë Ä÷³
=> ÆǸÅÀÏÀÚ : µ¥ÀÌÅÍ Ã¼Å© Ä÷³
=> Á¦Ç°ÄÚµå : µ¥ÀÌÅÍ Ã¼Å© Ä÷³
ÇÏÁö¸¸ ù ¹ø° Ä÷³ÀÌ LIKE Á¶°ÇÀ̹ǷΠÆǸŠÀÏÀÚ¿Í Á¦Ç° ÄÚµå´Â ´ÜÁö µ¥ÀÌÅ͸¦ °¡Áö°í ¿À±â À§ÇÑ Ã¼Å© Ä÷³¸¸ µÈ´Ù. Áï, ¿ì¼± ¼ø¼­¸¦ °¡Áø Ä÷³ÀÌ = Á¶°ÇÀÌ ¾Æ´Ñ °æ¿ì´Â µÚ Ä÷³Àº ¸ðµÎ µ¥ÀÌÅÍ Ã¼Å© Ä÷³ÀÌ´Ù.

°áÇÕ À妽º¸¦ »ç¿ëÇÒ ¶§¿¡´Â À妽º È°¿ë Ä÷³ÀÌ µ¥ÀÌÅÍ ¹üÀ§¸¦ ÃæºÐÈ÷ Á¼ÇôÁú ¶§ À¯¿ëÇÑ °ÍÀÌ´Ù. <±×¸² 1>°ú °°ÀÌ µ¥ÀÌÅÍ°¡ À妽º È°¿ë Ä÷³¿¡ ÀÇÇØ Á¡Á¡ Á¼ÇôÁö´Â ±¸Á¶°¡ µÅ¾ß ÇÑ´Ù. µ¥ÀÌÅÍ Ã¼Å© Ä÷³Àº µ¥ÀÌÅ͸¦ Á¼ÇôÁÖ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÐÀº ÈÄ ¹ö·ÁÁö´Â °æ¿ì°¡ ¸¹±â ¶§¹®ÀÌ´Ù.

<±×¸² 1>

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
À妽º¸¦ È°¿ëÇÏÁö ¸øÇϵµ·Ï SQLÀ» ÀÛ¼ºÇÑ °æ¿ì

 

SQL¹®ÀÇ WHERE Á¶°ÇÀý ±â¼ú½Ã ÇØ´çÇÏ´Â À妽º°¡ À־ ÈùÆ®¸¦ °­Á¦ÀûÀ¸·Î »ç¿ëÇÏÁö ¾ÊÀ¸¸é À妽º¸¦ È°¿ë ¸øÇÏ´Â °æ¿ì´Â <Ç¥ 2>¿Í °°´Ù.



À¯Çü ¿¹Á¦ ¹× ÇØ°á ¹æ¹ý
À妽º Ä÷³ ÀýÀ» º¯ÇüÇÑ °æ¿ì ¼ö½Ä, ÇÔ¼ö µîÀ¸·Î À妽º Ä÷³ ÀýÀ» º¯ÇüÇßÀ» °æ¿ìÀÌ´Ù.
¹Ýµå½Ã ÇÔ¼ö³ª ¼ö½ÄÀ» »ç¿ëÇÏ´Â °æ¿ì¿¡´Â À妽º Ä÷³ ºÎºÐ¿¡ Àû¿ëÇÏÁö ¸»°í ¿©±â¿¡ ´ëÀԵǴ Ä÷³ ¶Ç´Â »ó¼ö ºÎºÐ¿¡ Àû¿ëÇØ¾ß ÇÑ´Ù.
WHERE TO_CHAR(µî·ÏÀÏ, ¡¯YYYYMMDD) = ¡®20030618¡¯
=> WHERE µî·ÏÀÏ = TO_DATE(¡®20030618¡¯, ¡¯YYYYMMDD¡¯)
WHERE SAL * 30 > 30000
=> WHERE SAL > 1000
³»ºÎÀûÀ¸·Î µ¥ÀÌÅÍ Çü º¯È¯ÀÌ ÀϾ °æ¿ì ¼­·Î ´ëÀԵǴ Ç׸ñ³¢¸® µ¥ÀÌÅÍ Å¸ÀÔÀÌ ´Ù¸£¸é ³»ºÎÀûÀÎ Çü º¯È¯¿¡ ÀÇÇØ Ä÷³ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ È¿°ú¸¦ ³ªÅ¸³¾ ¼ö ÀÖ´Ù.
WHERE µî·ÏÀÏ = ¡®20030618¡¯
µî·ÏÀÏÀÌ DATE ŸÀÔÀε¥ ¹®ÀÚÇüÀ» Á÷Á¢ ´ëÀÔÇÏ°Ô µÇ¸é WHERE TO_CHAR(µî·ÏÀÏ, ¡¯YYYYMMDD¡¯) = ¡®20030618¡¯·Î ±â¼úµÈ °Í°ú ¶È °°Àº È¿°ú, Áï À妽º Ä÷³À» º¯ÇüÇÑ °Í°ú °°´Ù. µû¶ó¼­ »ó¼ö ÀýÀ» º¯Çü½ÃÄÑ ÁÖ¾î¾ß ÇÑ´Ù.
=> WHERE µî·ÏÀÏ = TO_DATE(¡®20030618¡¯, ¡¯YYYYMMDD¡¯)
Á¶°ÇÀý¿¡ NULL ¶Ç´Â NOT NULLÀ» »ç¿ëÇÑ °æ¿ì WHERE ¿¬Ã¼±Ý¾× IS NULL
±âº»ÀûÀ¸·Î À妽º¸¦ ±¸¼ºÇÑ Ä÷³ °ªÀÌ ÀüºÎ NULLÀ̶ó¸é À妽º´Â ÀÌ·± °ªÀ» ÀúÀåÇÏÁö ¾Ê´Â´Ù. µû¶ó¼­ NULLÀÎ °ªÀÌ ¸¹Áö ¾Ê¾Æ À妽º¸¦ ÅëÇØ ¾×¼¼½º¸¦ ÇÏ°íÀÚ ÇÑ´Ù¸é µ¥ÀÌÅÍ »ý¼º½Ã µðÆúÆ®·Î 0°ú °°ÀÌ µ¥ÀÌÅ͸¦ ¸¸µé¾î ÁÖ´Â °ÍÀÌ ³´´Ù. ¹Ý´ë·Î, ¸¸¾à ¿¬Ã¼±Ý¾×ÀÌ NULLÀÎ »ç¶÷ÀÌ ¸¹°í ¿¬Ã¼±Ý¾×ÀÌ ¾ø´Â »ç¶÷Àº º°·Î ºÐ¼® ´ë»óÀÌ ¾Æ´Ï°í ¿¬Ã¼±Ý¾×ÀÌ NOT NULLÀÎ »ç¶÷ÀÌ ºÐ¼® ´ë»óÀ̶ó¸é ¿¬Ã¼±Ý¾× Ä÷³À» NULL Çã¿ë Ä÷³À¸·Î µÎ´Â °ÍÀÌ ÁÁ´Ù.
WHERE ¿¬Ã¼±Ý¾× IS NOT NULL
=> WHERE ¿¬Ã¼±Ý¾× > 0
¾Õ¼­ ¸»ÇÑ °Íó·³ À妽º¿¡´Â ¿¬Ã¼±Ý¾× NULLÀÎ »ç¶÷Àº Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡, ¿¬Ã¼±Ý¾× ÀÖ´Â »ç¶÷¸¸À» ÃßÃâÇÏ°íÀÚ ÇÒ ¶§¿¡´Â ÇØ´ç À妽º¸¦ È°¿ëÇÏ´Â °ÍÀÌ ÈξÀ À¯¸®ÇÏ´Ù.
ºÎÁ¤ÇüÀ¸·Î Á¶°ÇÀ» »ç¿ëÇÑ °æ¿ì WHERE ¿¬Ã¼ÄÚµå != ¡®ºÎºÐ³³¡¯
ºÎÁ¤¹®Àº À妽º¸¦ È°¿ëÇÏÁö ¸øÇÑ´Ù.
WHERE ¿¬Ã¼ÄÚµå < ¡®ºÎºÐ³³¡¯ OR ¿¬Ã¼ÄÚµå > ¡®ºÎºÐ³³¡¯
¶Ç´Â Å×À̺íÀ» Çѹø ´õ Àоî NOT EXISTS¸¦ »ç¿ëÇ϶ó
WHERE NOT EXISTS
(SELECT ¡®X¡¯ FROM ü³³ WHERE ¿¬Ã¼ÄÚµå=¡¯ºÎºÐ³³¡¯)
LIKE ¿¬»êÀÚ¸¦ ¸Ç ¾Õ¿¡ »ç¿ëÇÏ´Â °æ¿ì WHERE ÁÖ¼Ò LIKE ¡®%½Å¸²¡¯
ÀÌ °æ¿ì¿¡´Â À妽º¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ÀÌ·± ÀÌÀ¯·Î Ä÷³À» ½Ãµµ, ±º±¸, µ¿À¾À¸·Î ÁÖ¼Ò
Ä÷³À» ³ª´©¾î »ý¼ºÇÏ´Â °ÍÀÌ ÁÁ´Ù.

<Ç¥ 2> À妽º È°¿ëÀ» ¸øÇÏ´Â À¯Çü



¿ªÀ¸·Î À妽º¸¦ »ç¿ëÇÏ´Â °ÍÀ» ¹æÇØÇÏ´Â ¿ø¸®¸¦ ÀÌ¿ëÇÏ¿© À妽º°¡ ºÒ¸®ÇÏ´Ù°í »ý°¢µÇ´Â °æ¿ì ÀϺη¯ ¾ÕÀÇ ¿¹¿¡ ±â¼úµÈ °Íó·³ ½á ÁÖ´Â ±â¹ýµµ ¸¹ÀÌ »ç¿ëµÈ´Ù. ÇÏÁö¸¸ ÇÊÀÚ ÀÇ°ßÀ¸·Î´Â ÀûÀýÇÏ°Ô ÈùÆ®¸¦ ±¸»çÇÏ¿© Á¦¾î¸¦ ÇÏ´Â °ÍÀÌ °¡µ¶¼º Ãø¸é¿¡¼­ ´õ ³ªÀº ¹æ¹ýÀ̶ó »ý°¢ÇÑ´Ù.


¿ÉƼ¸¶ÀÌÀúÀÇ ¼±ÅÃ(ÈùÆ® ÀÌ¿ë)

 

·ê ±â¹Ý ¿ÉƼ¸¶ÀÌÀú°¡ ¾Æ´Ñ °æ¿ì À妽º¸¦ È°¿ëÇÏ°íÀÚ Çϳª ¿ÉƼ¸¶ÀÌÀú°¡ ÆÇ´ÜÇÏ¿© ÀÚ½ÅÀÌ »ý°¢ÇÏ´Â À妽º¸¦ È°¿ëÇÏÁö ¾Ê°í Ç®(FULL) ½ºÄµÀ̳ª ´Ù¸¥ À妽º¸¦ »ç¿ëÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ´Â ¿ÉƼ¸¶ÀÌÀú°¡ ÀÚüÀûÀ¸·Î ÆÇ´ÜÇÏ¿© SQL ½ÇÇà°èȹÀ» ÀÛ¼ºÇϱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¾ÆÁ÷ ÃÖÀûÈ­µÈ SQL ½ÇÇà °èȹÀ» Á¦½ÃÇØ ÁÖÁö ¸øÇÏ°í ÀÖ´Ù. µû¶ó¼­ ÀÌ·± °æ¿ì ÈùÆ®¸¦ »ç¿ëÇÑ´Ù¸é ÀÚ½ÅÀÌ »ý°¢ÇÏ´Â À妽º¸¦ »ç¿ëÇ϶ó°í Áö½Ã¸¦ ³»¸± ¼ö ÀÖ´Ù.

ÈùÆ® »ç¿ë ¹®¹ýÀº /*+ INDEX(Å×À̺í¸í À妽º¸í) */ÀÌ´Ù. ÈùÆ®´Â /* */À̶ó´Â ÁÖ¼® ¹®±¸¿¡ ÇØ´çÇϹǷΠ´Ù¸£´õ¶óµµ ÄÄÆÄÀÏÀ̳ª ½ÇÇà½Ã ¿À·ù´Â ³»Áö ¾Ê´Â´Ù. µû¶ó¼­ ¹®Á¦°¡ ÀÖ¾î ¼öÁ¤Çߴµ¥ Àß ¸ø »ç¿ëÇÏ¿© ÈùÆ® ¹®ÀåÀÌ Á¦´ë·Î ¼öÇàµÇÁö ¾ÊÀ» ¼ö ÀÖÀ¸´Ï ¹Ýµå½Ã Ç÷£À» ÀÛ¼ºÇØ Á¦´ë·Î È°¿ëµÇ¾ú´ÂÁö¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù.


2 À妽º¸¦ Ÿ´Âµ¥ ¿Ö ´À¸®ÁÒ
(µ¥ÀÌÅÍ ºÐÆ÷µµ¿Í SQL¹® È£Ãâ Ƚ¼ö¸¦ °í·Á)

µ¥ÀÌÅÍ ºÐÆ÷µµ°¡ ³·Àº °æ¿ì

 

°úµµÇÑ ¼ÒÆ®¸¦ ¹æÁöÇϱâ À§ÇØ À妽º¸¦ È°¿ëÇÏ´Â °æ¿ìµµ ÀÖÁö¸¸ À妽º È°¿ëÀÇ ÁÖ ¸ñÀûÀº ¼ö¸¹Àº µ¥ÀÌÅÍ Áß ÀÚ½ÅÀÌ ÀаíÀÚ ÇÏ´Â ºÎºÐÀÌ ÀûÀº °æ¿ì ÇØ´ç ºÎºÐ¸¸À» ÀаíÀÚ ÇÒ ¶§ »ç¿ëµÇ´Â °ÍÀÌ´Ù. µû¶ó¼­ À妽º·Î ÁöÁ¤ÇÑ Ä÷³¿¡ ÁÖ¾îÁø Á¶°ÇÀÌ Àüü µ¥ÀÌÅÍÀÇ 10% ¹Ì¸¸ÀÌÁö ¾ÊÀ» ¶§¿¡´Â µÇµµ·Ï Ç® ½ºÄµÀ» ÇÏ´Â °ÍÀÌ ÀÏ¹Ý ·ê·Î µÇ¾î ÀÖ´Ù. ÀÌ´Â À妽º¿Í µ¥ÀÌÅÍ ÆÄÀÏÀ» Àоî¾ß Çϱ⠶§¹®¿¡ 2¹èÀÇ ³ë·ÂÀÌ µå´Â °ÍÀÌ°í ¸ÖƼ ºí·° Read¸¦ ÇÏÁö ¾Ê±â ¶§¹®¿¡ 5°³ ÀÌ»óÀÇ ºí·°À» ÇÑ ¹ø¿¡ Àоî¿À´Â Ç® ½ºÄµ¿¡ ºñÇØ 5¹è, Áï ÃÖ¼Ò 10¹è ÀÌ»óÀÇ ³ë·ÂÀÌ ¼ö¹ÝµÈ´Ù°í º¸±â ¶§¹®ÀÌ´Ù. µû¶ó¼­ Á¶°ÇÀÌ À妽º·Î ÀÐÇôÁø´Ù¸é ¹Ýµå½Ã µ¥ÀÌÅÍ ºÐÆ÷µµ¸¦ »ý°¢ÇØ¾ß ÇÑ´Ù.
¿¹¸¦ µé¾î Àü±¹ ±¹¹ÎÀ» Á¶È¸Çϴµ¥ ÀÌÁß ¼­¿ï¿¡ »ç´Â »ç¶÷¸¸ Á¶È¸¸¦ ÇÑ´Ù¸é ¼­¿ï¿¡ »ç´Â Àα¸ ºÐÆ÷´Â ¹Ý Á¤µµÀÌ´Ù. À̸¦ À妽º¸¦ È°¿ëÇÑ´Ù¸é ºÐ¸í È¿°úÀûÀÎ À妽º È°¿ëÀÌ ¾Æ´Ï´Ù.

 

SQL¹®ÀÌ °úµµÇÏ°Ô È£ÃâµÇ´Â °æ¿ì

 

¸¸¾à ´ë¿ë·® µ¥ÀÌÅ͸¦ È°¿ëÇÏ´Â »ç¶÷Àº ¹Ýµå½Ã ¼÷µ¶Çϱ⠹ٶõ´Ù. ÀüÇüÀûÀÎ ¹èÄ¡ ÇÁ·Î±×·¥À» ¿¹·Î µç´Ù¸é <¸®½ºÆ® 1>°ú °°ÀÌ ÇÁ·Î±×·¥ÀÌ ¼öÇàµÈ´Ù.


±¸ Á¶ ¿¹ ¹®

DECLARE MAIN-CURSOR;
DECLARE SUB-CURSOR;
OPEN MAIN-CURSOR ;
LOOP
FETCH MAIN-CURSR;
¡¡¡¡¡¡ OPEN SUB-CURSOR ;
FETCH SUB-CURSOR;
CLOSE SUB-CURSOR;
END-LOOP;
CLOSE MAIN-CURSOR;

DECLARE MAIN_CURSOR
SELECT °í°´, °í°´¸í, ¿ìÆí¹øÈ£, ³ª¸ÓÁö ÁÖ¼Ò
FROM °í°´;
DECLARE SUB_CURSOR
SELECT ¿ìÆí¹øÈ£ÁÖ¼Ò FROM ¿ìÆí¹øÈ£
WHERE ¿ìÆí¹øÈ£ = :º¯¼ö;
OPEN MAIN-CURSOR
LOOP
¡¡ FETCH MAIN-CURSOR;
¡¡ :º¯¼ö = °í°´.¿ìÆí¹øÈ£;
SELECT ¿ìÆí¹øÈ£ ÁÖ¼Ò FROM ¿ìÆí¹øÈ£
WHERE ¿ìÆí¹øÈ£ = :º¯¼ö;
END-LOOP
CLOSE MAIN-CURSOR;

¿äÁîÀ½Àº SQL¹®À¸·Î ÇÑ ¹ø¿¡ µ¥ÀÌÅ͸¦ °¡Áö°í ¿À´Â °É ÇÁ·Î±×·¡¸Ó´Â ¼±È£Çϱ⠶§¹®¿¡ <¸®½ºÆ® 1>ó·³ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ¿¹´Â µå¹°´Ù. ¾Æ¸¶ MAIN CURSOR¸¦ ´ÙÀ½°ú °°ÀÌ ±¸¼ºÇÒ °ÍÀÌ´Ù.

SELECT A.°í°´¹øÈ£, A.°í°´¸í, A.¿ìÆí¹øÈ£, B.¿ìÆí¹øÈ£ ÁÖ¼Ò, A.³ª¸ÓÁö ÁÖ¼Ò
FROM °í°´ A, ¿ìÆí¹øÈ£ B
WHERE A.¿ìÆí¹øÈ£ = B.¿ìÆí¹øÈ£;

¡¡¡¡¡¡ ÇÁ·Î±×·¥ÀÇ ÆíÀ̼º ¶§¹®¿¡ ÀÌ·¸°Ô ÇÏ´Â »ç¶÷µéÀÌ ¸¹Áö¸¸, ¿Ö SQL¹®À» ÇÕÃÄ¾ß ÇÏ´ÂÁö¸¦ ¹°¾îº¸¸é ¿ø¸®¸¦ ÀÌÇØÇÏ´Â »ç¶÷Àº ¸¹Áö ¾Ê´Ù. <¸®½ºÆ® 1>ÀÇ °æ¿ì LOOP¹® ¾È¿¡ Á¤¸» °£´ÜÇÑ SQL¹®ÀÌ À妽º¸¦ È°¿ëÇÏ¿© Á¦´ë·Î ÀÐÇôÁø´Ù Çصµ °í°´ ¼ö°¡ ¸î õ¸¸ °ÇÀÎ °æ¿ì ¾î¶°ÇÑ°¡? ÀÌ SQL¹®Àº ¿©Áö¾øÀÌ ¸î õ¸¸¹ø DB ¿£Áø¿¡°Ô ÀڷḦ ¿äûÇÑ´Ù. SQL¹®ÀÌ ´øÁ®Áö¸é <±×¸² 2>¿Í °°ÀÌ ±¸¹®Çؼ® -> ½ÇÇà°èȹ -> ¹ÙÀεå -> ½ÇÇà -> ÀÎÃâÀ̶ó´Â °úÁ¤À» °ÅÄ¡°Ô µÈ´Ù.


<±×¸² 2> SQL¹® Çؼ® °úÁ¤


¹Ýº¹ ¼öÇàµÊÀº ¹°·Ð °øÀ¯ Ç®À̶ó´Â °÷¿¡ ÀÌ¹Ì ½ÇÇàµÈ SQL¹®ÀÌ Á¸ÀçÇÏ¿© ½ÇÇà°èȹÀ» ´Ù½Ã »ý¼ºÇÏÁö ¾Ê´õ¶óµµ °è¼ÓÀûÀÎ ¼öÇàÀº µ¥ÀÌÅͺ£À̽ºÀÇ »ó´çÇÑ ºÎ´ãÀÌ µÈ´Ù. µû¶ó¼­ LOOP¹® ¾È¿¡ È£ÃâµÇ´Â SQL¹®ÀÌ ´Ü ÇÑ °ÇÀ» ¿äûÇÏ´õ¶óµµ ¹Ýµå½Ã MAIN CURSOR¿¡ º´ÇÕÇÏ´Â ¿¬½ÀÀ» ÇØ¾ß ÇÑ´Ù. Áö±ÝÀº µÎ °³ÀÇ Å×À̺í·Î °£´ÜÇÏ°ÚÁö¸¸ ¿©·¯ Å×À̺íÀÌ µÇ°í µµÁß¿¡ ¾÷¹«°¡ ¹Ù²î¾î ÇÁ·Î±×·¥À» ¼öÁ¤Çϸ鼭 ¿©±âÀú±â SQL¹®À» Ãß°¡Çϱ⠶§¹®¿¡ ÀÌ·± ÇüÅÂÀÇ ÇÁ·Î±×·¥ÀÌ ¸¹ÀÌ ¸¸µé¾îÁö°Ô µÈ´Ù.

ÇÏÁö¸¸ ÀÌ SQL¹®µµ ¸ÍÁ¡Àº ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ¿ìÆí¹øÈ£ À妽º¿Í µ¥ÀÌÅÍ ÆÄÀÏÀ» °è¼ÓÀûÀ¸·Î ¸î õ¸¸¹ø µ¥ÀÌÅ͸¦ ¾×¼¼½ºÇϱ⠶§¹®ÀÌ´Ù. ÀÌ´Â <¸®½ºÆ® 1>¿¡¼­ ³ªÅ¸³­ ÇÁ·Î±×·¥ÀÇ ±¸Á¶¿Í º° Â÷ÀÌ°¡ ¾ø°Ô µÈ´Ù. µû¶ó¼­ À̸¦ °³¼±Çϱâ À§ÇÑ ¹æ¹ýÀÌ Çؽà Á¶ÀÎÀÌ´Ù.

Çؽà Á¶ÀÎÀº Áßø ·çÇÁ(NESTED LOOP) ¹æ½Ä Á¶ÀÎÀÇ ´ÜÁ¡À» ȹ±âÀûÀ¸·Î °³¼±ÇØÁØ´Ù. Åë»óÀûÀ¸·Î ÀÛÀº Å×À̺íÀ» ±âÁØÀ¸·Î Çؽà Å×À̺íÀ» ¸¸µé¾î Á¤·ÄÇÑ ÈÄ Çؽà ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© Á¶ÀÎÇÏ´Â ¹æ½ÄÀÌ´Ù. Çؽà Á¶ÀÎÀÌ ³»ºÎÀûÀ¸·Î ¾î¶»°Ô ÀϾ´ÂÁö´Â ÀÌÇØÇÏÁö ¸øÇÏ´õ¶óµµ, °úµµÇÑ Áßø ·çÇÁ ¹æ½ÄÀ» ÇÇÇÏ°íÀÚ ÇÒ ¶§ ƯÈ÷ °Ç¼ö°¡ Å« Å×À̺íÀ» ÃßÃâÇÏ¿© °Ç¼ö°¡ ÀÛÀº Å×À̺í°ú Á¶Àνÿ¡´Â ÈξÀ ´õ ÁÁÀº ¼º´ÉÀ» ³½´Ù. ´Ü Çؽà Á¶ÀÎÀº ¡®=¡¯ Á¶°ÇÀÏ ¶§ °¡´ÉÇÏ´Ù.

SELECT /*+ USE_HASH(B A) FULL(B) FULL(A) */
A.°í°´¹øÈ£, A.°í°´¸í, A.¿ìÆí¹øÈ£, B.¿ìÆí¹øÈ£ ÁÖ¼Ò, A.³ª¸ÓÁö ÁÖ¼Ò
FROM °í°´ A, ¿ìÆí¹øÈ£ B
WHERE A.¿ìÆí¹øÈ£ = B.¿ìÆí¹øÈ£;

¶Ç ÇÑ °¡Áö ¹æ¹ýÀ¸·Î´Â µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏÁö ¸»°í ¸Þ¸ð¸®¿¡ »ç¿ëÁ¤º¸¸¦ ¿Ã·Á¼­ À̸¦ ÂüÁ¶ÇÏ´Â ¹æ½ÄÀÌ´Ù. Á¶ÀεǴ Å×À̺íÀÌ ¸¹¾Æ Çؽà Á¶ÀÎÀ¸·Îµµ ¸ñÇ¥ ½Ã°£À» ȹµæÇϱâ Èûµé´Ù¸é ÀÚÁÖ º¯ÇÏÁö ¾Ê´Â Á¤º¸¿¡ ÇÑÇØ µ¥ÀÌÅͺ£À̽º»óÀÇ Á¤º¸¸¦ ÇÁ·Î¼¼½º ½ÃÀ۽ÿ¡ ¸Þ¸ð¸®·Î ·ÎµåÇÑ µÚ ¸Þ¸ð¸®¸¦ ÂüÁ¶Ç϶ó´Â ¶æÀÌ´Ù. ¾ÕÀÇ ¿¹¿Í °°ÀÌ ¿ìÆí¹øÈ£ Å×À̺íÀº °ÅÀÇ º¯µ¿ÀÌ ¾ø´Â Á¤º¸ÀÌ´Ù. ÀÌ Á¤º¸¸¦ ¸Þ¸ð¸®¿¡ ¿Ã·Á »ç¿ëÇÏ´õ¶óµµ µ¥ÀÌÅÍ ¹«°á¼ºÀÌ ±úÁú À§ÇèÀº Àû´Ù. »óÇ° Á¤º¸, ¿äÀ² Á¤º¸, °¢Á¾ ÄÚµå Á¤º¸ µîÀÌ ÀÌ¿¡ ÇØ´çÇÑ´Ù.
ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀº ¹«°á¼ºÀ» ±úÆ®¸± À§ÇèÀÌ ¾î·µç Á¸ÀçÇϹǷΠ¹Ýµå½Ã ´Ù¸¥ ¾÷¹«ÆÀ°ú ÇùÀÇÇÏ¿© °áÁ¤ÇØ¾ß Çϸç, ´ë»ó ÇÁ·Î¼¼½º°¡ ¼öÇà½Ã¿¡´Â °ü·Ã Á¤º¸¸¦ ¼öÁ¤ÇÏ´Â ÀÏÀÌ ¾øµµ·Ï ÇØ¾ß ÇÑ´Ù.
¸¶Áö¸· ¹æ¹ýÀ¸·Î´Â LOOP¹® ¾È¿¡ SQL¹® ½ÇÇà Ƚ¼ö¸¦ ÁÙÀÌ´Â ÁÁÀº ¾ÆÀ̵ð¾î¸¦ Â¥³»¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î Áö¿ªº°·Î ¼­¹ö°¡ ³ª´²Áø °æ¿ì¶ó¸é ¿ìÆí¹øÈ£°¡ °°Àº °í°´ÀÌ ¿¬´Þ¾Æ ÀÐÇôÁú °¡´É¼ºµµ ÀÖ´Ù. ±×·¸´Ù¸é ÀÌÀü °í°´¿¡¼­ ÀÐÇôÁø °í°´ ¿ìÆí¹øÈ£¿Í Áö±Ý ÀÐÇôÁø °í°´ ¿ìÆí¹øÈ£°¡ °°´Ù¸é ±»ÀÌ ¿ìÆí¹øÈ£ Å×À̺íÀ» ¶Ç ÀÐÀ¸·¯ °¥ ÀÌÀ¯°¡ ¾ø´Ù. ÀÌÀü µ¥ÀÌÅ͸¦ ¸Þ¸ð¸®¿¡ ÀúÀåÇß´Ù°¡ ÀÌ °ªÀ» Àû¿ëÇÏ¸é µÈ´Ù. ÀÌ´Â ¿¹»ó ¹ÛÀÇ ¼ÒµæÀ» ¿Ã¸± ¼ö ÀÖ´Ù.


3 ¸îõ ¸¸°ÇÀº ¼Óµµ°¡ »¡¸® ³ª¿À´Âµ¥ ¿Ö °Ü¿ì 100°Ç Á¶È¸ ½Ã¿¡´Â ´À¸°°¡¿ä

 

(Àüü ¹üÀ§ ó¸®¿Í ºÎºÐ ¹üÀ§ ó¸®ÀÇ °í·Á)
¡°SQLPLUS¿¡¼­ ¸îõ ¸¸ °Ç ÀÌ»óÀÎ Å×À̺íÀ» Á¶È¸ÇÏ¸é ±Ý¹æ °á°ú°¡ È­¸é¿¡ ³ª¿À´Âµ¥ ¸î°Ç µÇÁö ¾Ê´Â µ¥ÀÌÅÍ´Â ¿Ö ¿À·¡ °É¸®³ª¿ä?¡±¶ó°í Áú¹®À» ÇÏ´Â °³¹ßÀÚ°¡ ¸¹ÀÌ ÀÖ´Ù.

SELECT * FROM ÅëÈ­³»¿ª WHERE ¹ß½ÅÁö¿ª = ¡®¼­¿ï¡¯;
SELECT ³â¿ù, SUM(±Ý¾×) FROM ü³³Á¤º¸ GROUP BY ³â¿ù;

ÀÌ°ÍÀÌ ÀϹÝÀûÀ¸·Î Æ©´× Ã¥¿¡¼­ ¸»ÇÏ´Â ºÎºÐ ¹üÀ§¿Í Àüü ¹üÀ§¸¦ ¶æÇÏ´Â °ÍÀÌ´Ù. ù ¹ø° SQL¹®¿¡¼­ ÅëÈ­³»¿ªÀº ¸î¾ï °ÇÀÌ µÇÁö¸¸ DB¿¡¼­ ÀÐÀº °á°ú¸¦ ±×´ë·Î È­¸é¿¡ ³ªÅ¸³»¸é µÇ±â ¶§¹®¿¡ ÀÏÁ¤ ¹öÆÛ¿¡ Â÷¸é Ãâ·ÂÇÑ´Ù. µÎ ¹ø° SQL¹®¿¡¼­´Â DB¿¡¼­ ÀÐÀº °á°ú¸¦ ±×´ë·Î È­¸é¿¡ Ãâ·ÂÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó GROUP BY¿Í SUM ÀÛ¾÷ ÈÄ ±× °á°ú¸¦ Ãâ·ÂÇÑ´Ù.

µû¶ó¼­ ù ¹ø° SQL¹®Àº ¿£ÅÍ Å°¸¦ Ä¡¸é ÁÖ¸£¸¤ È­¸é¿¡ µð½ºÇ÷¹ÀÌµÇ°í µÎ ¹ø° ¹®ÀåÀº ÀÏÁ¤½Ã°£À» ±â´Ù¸° ÈÄ Ãâ·ÂµÇ´Â °ÍÀÌ´Ù. ÀÌ´Â Æ©´×¿¡¼­ Áß¿äÇÑ Àǹ̸¦ °¡Áø´Ù. ƯÈ÷ OLTP¼º ¾÷¹«(¿Â¶óÀÎ, Áï È­¸é ó¸®)¿¡¼­ ´õ¿í Àǹ̰¡ Å©´Ù. ù ¹ø° SQL¹®Àº »¡¸® »¡¸® °á°ú °ªÀÌ Â÷·Ê·Î ¸®ÅϵÇÁö¸¸ ¿ÏÀüÈ÷ Àü µ¥ÀÌÅ͸¦ È­¸é¿¡ Ãâ·ÂÇÑ´Ù¸é µÎ ¹ø° SQL¹®º¸´Ù ´À¸®´Ù. ù ¹ø° °°Àº 󸮸¦ ºÎºÐ ¹üÀ§ 󸮶ó ÇÏ°í µÎ ¹ø° °°Àº 󸮸¦ Àüü ¹üÀ§ 󸮶ó ºÎ¸¥´Ù.

OLTP ¾÷¹«´Â ÇÑÁ¤µÈ È­¸é, ¸¹¾Æ¾ß ¸¸°Ç Á¤µµ¸¦ »ç¿ëÀÚ°¡ ¿Â¶óÀο¡¼­ 󸮸¦ ÇÏ°Ô µÈ´Ù. µû¶ó¼­ ¾ó¸¶³ª »¡¸® »ç¿ëÀÚ¿¡°Ô °á°ú¸¦ óÀ½ ³»º¸³» ÁÖ¾î¾ß Çϴ°¡°¡ Æ©´× Æ÷ÀÎÆ®´Ù. µû¶ó¼­ °Ç¼ö°¡ ¸¹Àº °æ¿ì¿¡´Â ¡®NEXT¡¯ ¹öÆ°À» ÀÌ¿ëÇÏ¿© ´ÙÀ½ °á°úºÎÅÍ 100°Ç Á¤µµ¾¿ º¸¿©ÁÖ¸é µÈ´Ù. ¿ì¸®³ª¶ó »ç¿ëÀÚ´Â ¹«Ã´ ¼Óµµ¿¡ ¹Î°¨ÇÏ´Ù. 5ÃÊ 10ÃÊ°¡ ³Ñ¾î°¡¸é ¾öû Â¥ÁõÀ» ³½´Ù. 30ÃÊ Áö³ª¼­ È­¸é¿¡ µð½ºÇ÷¹ÀÌµÈ´Ù¸é »ç¿ëÀÚ´Â ´çÀå °³¹ßÀÚ¿¡°Ô ½ÃÁ¤À» ¸íÇÒ °ÍÀÌ´Ù. ¸¹Àº Ãâ·Â µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖ´õ¶óµµ È­¸é ´ÜÀ§·Î ºü¸£°Ô 󸮸¦ ÇØ ³ª°¡¾ß ÇÑ´Ù.

¹Ý´ë·Î ¹èÄ¡¼º ¾÷¹«´Â ÁÖ·Î Àü»ê ÀÛ¾÷ÀÚ°¡ ÀÏÁ¤ÇÑ ÀÛ¾÷ ½Ã³ª¸®¿À·Î ÀÛ¾÷À» ÇÑ´Ù. È­¸é¿¡ ³ªÅ¸³ª´Â Áß°£ °ªº¸´Ù´Â ÃÖÁ¾ ÀÛ¾÷ °á°ú°¡ Áß¿äÇÏ´Ù. È­¸é¿¡ »¡¸® µð½ºÇ÷¹ÀÌµÈ´Ù°í »¡¸® ³¡³ª´Â °ÍÀº Àý´ë ¾Æ´Ï´Ù. ÀÌ·± ÀÌÀ¯·Î OLTP¿¡¼­´Â ÁÖ·Î Áßø ·çÇÁ ¹æ½ÄÀ» ¼±È£ÇÏ°í ¹èÄ¡ ¾÷¹«¿¡¼­´Â Çؽà Á¶ÀÎ ¹æ½ÄÀ» ¼±È£ÇÏ°Ô µÈ´Ù. Çؽà Á¶ÀÎÀº Çؽà Å×À̺íÀ» »ý¼ºÇϱ⠶§¹®¿¡ óÀ½ ¸®ÅÏÇÏ´Â ½Ã°£ÀÌ Áö¿¬µÈ´Ù. ÇÏÁö¸¸ Áßø ·çÇÁ ¹æ½ÄÀº ÇØ´ç Á¶°Ç¿¡ ¸Â´Â µ¥ÀÌÅ͸¦ Â÷·ÊÂ÷·Ê °Ë»öÇϱ⠶§¹®¿¡ ÀÏÁ¤ ¹öÆÛ¿¡ ä¿ì±â±îÁö ¾ó¸¶ÀÇ ½Ã°£ÀÌ ¼Ò¿äµÇÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î °í°´ Å×À̺í°ú »ç¿ë¿ä±Ý Å×À̺íÀÌ ÀÖ´Ù¸é ¿Â¶óÀÎ ¾÷¹«¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ SQL¹®ÀÌ ±¸»çµÉ °ÍÀÌ´Ù.

SELECT /*+ USE_NL(A B) */ A.°í°´¸í, B.»ç¿ë¿ä±Ý FROM °í°´ A, ¿ä±Ý B
WHERE A.°í°´ID = B.°í°´ ID

ÀÌ·± °æ¿ì B Å×ÀÌºí¿¡ °í°´ ID¶ó´Â À妽º°¡ ±¸¼ºµÇ¾î °í°´ ID¸¦ Â÷·Ê·Î Á¶ÀÎÇØ °¡¸é¼­ ÀÐ°Ô µÇ¸ç ÀÏÁ¤ È­¸é ¹öÆÛ¿¡¸¸ Â÷¸é °á°ú¸¦ ¸®ÅÏÇÏ´Â °ÍÀÌ´Ù. ¸¸¾à¿¡ ¹èÄ¡ ÇÁ·Î±×·¥À̶ó¸é ¾Õ¼­ ¸»ÇßµíÀÌ Áßø ·çÇÁ ¹æ½ÄÀÌ ³»ºÎÀûÀÎ DBÀÛ¾÷ÀÌ ºÎ´ãÀÌ ´õ ¸¹±â ¶§¹®¿¡ Çؽà Á¶ÀÎÀ¸·Î ¹Ù²Ù¾î ½ÇÇàÇÒ °ÍÀÌ´Ù.

SELECT /*+ USE_HASH(A B) */ A.°í°´¸í, B.»ç¿ë¿ä±Ý FROM °í°´ A, ¿ä±Ý B
WHERE A.°í°´ID = B.°í°´ID

ÀÌ·¸´Ù¸é °í°´ Å×À̺íÀ» Çؽà Å×À̺í·Î ¸¸µå´Â µ¿¾ÈÀº È­¸é¿¡ ¾Æ¹«°Íµµ Ãâ·ÂµÇÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ÃÖÁ¾ °á°ú´Â Çؽà Á¶ÀÎ ¹æ½ÄÀÌ ÈξÀ ºü¸£´Ù. µû¶ó¼­ ¿Â¶óÀÎ ÇÁ·Î±×·¥ Æ©´×½Ã¿¡´Â È­¸é ¹öÆÛ¿¡ ³ªÅ¸³¾ ºÎºÐÀ» ¾î¶»°Ô ºü¸£°Ô ÇÒ °ÍÀΰ¡¸¦ °í¹ÎÇÏ¿© µÇµµ·Ï ºÎºÐ ¹üÀ§·Î ¸¸µé¾î ÁÖ´Â ¿¬½ÀÀ» ¸¹ÀÌ ÇØ¾ß Çϸç, ¹èÄ¡ ÇÁ·Î±×·¥ÀÎ °æ¿ì´Â Àüü ¿Ï·á½Ã°£ ´ÜÃàÀ» ¸ñÇ¥·Î Æ©´×ÇØ¾ß ÇÑ´Ù. GROUP BY, ORDER BY·Î µÇ¾î ÀÖ´Â ¹®ÀåÀº ±×¿¡ ¸Â´Â À妽º¸¦ »ý¼ºÇÏ¿© º°µµÀÇ Á¤·Ä ÀÛ¾÷À¸·Î ÀÎÇØ Àüü ¹üÀ§·Î ½ÇÇàµÇ´Â °ÍÀ» ¸·¾Æ ÁÙ ¼ö ÀÖ´Ù.

¿Â¶óÀÎ È­¸é ¼³°è½Ã¿¡µµ PC »ç¾çÀÌ ¸¹ÀÌ ÁÁ¾ÆÁø Å¿¿¡ ¸î¸¸ ¶óÀÎÀÌ ³Ñµµ·Ï È­¸é ¹öÆÛ¸¦ Àâ´Â »ç¶÷µéµµ ¸¹´Ù. ÀÌ´Â 1000°Ç ´ÜÀ§·Î È­¸éÀ» ¸¸µé¾úÀ» ¶§º¸´Ù ¼Óµµ°¡ ¶³¾îÁú ¼ö¹Û¿¡ ¾ø´Ù. ÇÊÀÚ´Â ¾î¶² °æ¿ì ¿Â¶óÀÎ ÇÁ·Î±×·¥ÀÌ ¸¶Ä¡ Ãâ·Â ÇÁ·Î±×·¥À» º¸´Â µíÇÑ ´À³¦À» ¹ÞÀ» ¶§°¡ ¸¹´Ù. ¿¹¸¦ µé¾î ÇÑ ´Þ µ¿¾ÈÀÇ Ã¼³³ÀÚ¸¦ Á¶È¸ÇÏ´Â È­¸éÀÌ ÀÖ¾ú´Ù. ÇÑ ´Þ¿¡ 200¸¸ °Ç Á¤µµÀÇ Ã¼³³ÀÚ°¡ Àִµ¥ È­¸é Á¶°Ç¿¡´Â ³â ¿ù Á¶°Ç¸¸ ÀÖ¾úÀ¸¸ç ÇÑ È­¸é¿¡¼­ 1¸¸ °Ç Á¤µµ¾¿ º¸¿© ÁÖ¾ú´ø °ÍÀ¸·Î »ý°¢³­´Ù. ±×·³ ÀÌ »ç¿ëÀÚ´Â 200¹øÀ» ¡®NEXT¡¯ ¹öÆ°À» º¸¸ç Àü ü³³ÀÚ¸¦ Á¶È¸ÇÏ´Â °ÍÀΰ¡?

ÀÌ·± È­¸éÀº ¸®Æ÷Æ®·Î Ãâ·ÂÇÏ¿© º¸°üÀÇ Àǹ̷θ¸ ÇÏ¸ç ¿Â¶óÀÎ ÇÁ·Î±×·¥À¸·Î¼­ÀÇ Á¸Àç Àǹ̰¡ º°·Î ¾ø´Ù. ƯÁ¤ ü³³ÀÚ¸¦ ã±â À§ÇØ ÀÌ »ç¶÷Àº ÃÖ´ë 200¹øÀÇ ¡®NEXT¡¯ ¹öÆ°À» ´­·¯¾ß ÇÑ´Ù. ÀÌ´Â ÀÌ »ç¶÷¿¡°Ô ÇÊ¿ä ¾ø´Â Á¤º¸¸¦ Á¦°øÇϸ鼭 ±ÍÁßÇÑ µ¥ÀÌÅͺ£À̽º ÀÚ¿øÀ» ³¶ºñÇÏ°í ÀÖ´Â °ÍÀÌ´Ù. Áֹεî·Ï¹øÈ£¸¦ ÀÔ·ÂÇϸé ƯÁ¤ ü³³ÀÚ¸¦ ãµµ·Ï ÇØ ÁÖµçÁö, ü³³ ±Ý¾×ÀÌ ¾ó¸¶ ÀÌ»óÀÎ °í°´À» ã´Â´ÙµçÁö ÀÌ·± ÁÖ¿ä Á¶°ÇÀ» °¡Áö°í ãÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

±×·¸´Ù¸é ¡°ÀÌ·± Áֹεî·Ï¹øÈ£¶óµçÁö, ü³³±Ý¾×, ü³³ Ƚ¼ö µî¿¡ ´ëÇØ Á¶È¸¸¦ Çϱâ À§ÇØ ¸ðµç Ä÷³¿¡ À妽º¸¦ ¸¸µé¾î¾ß Çϴ°¡?¡±¶ó´Â Áú¹®ÀÌ ³ª¿Ã ¼ö ÀÖ´Ù. ¿øÄ¢ÀûÀ¸·Î ÀÌ ÇÁ·Î±×·¥¸¸À» À§Çؼ­´Â ¡®YES¡¯°¡ Á¤´äÀÌ´Ù. ÇÏÁö¸¸ À妽º Çϳª¸¦ ¸¸µé¸é ÀÌ ÇÁ·Î±×·¥ÀÇ ¼Óµµ¸¦ °³¼±ÇÒÁö ¸ô¶óµµ ÀÌ Ã¼³³ Å×À̺íÀ» »ý¼ºÇÏ´Â ÇÁ·Î¼¼½º´Â ±× ÀÌ»ó ´À·ÁÁø´Ù.


ÀÌ ¹®Á¦°¡ Æ©´×½Ã ÀÚÁÖ ºÎµúÈ÷°Ô µÈ´Ù. Á¶È¸¸¦ ºü¸£°Ô ÇÏÀÚ´Ï »ý¼º ÇÁ·Î¼¼½º°¡ ´À·ÁÁö°í »ý¼º ÇÁ·Î¼¼½º¸¦ ºü¸£°Ô ÇÏÀÚ´Ï À妽º¸¦ Æ÷±âÇÏ°Ô µÇ°í. ¾Æ¸¶ Æ©´× ´ã´çÀÚµéÀÌ °¡Àå ¾Ö¸¦ ¸Ô´Â ºÎºÐÀÌ ¾Æ´Ò±î ½Í´Ù. ÇÏÁö¸¸ ¿Õµµ´Â ¾ø´Ù. ¡®µÑ Áß Çϳª´Â Æ÷±âÇ϶󡯰¡ ´äÀÌ´Ù. Æ÷±âÀÇ Á¶°ÇÀº ¾÷¹«ÀÇ Á߿伺°ú »ç¿ë ºóµµ°¡ ±âÁØÀÌ µÈ´Ù. Çϳª¸¦ Æ÷±âÇÑ ´ÙÀ½ ÃÖ¼ÒÀÇ ÇÇÇØ°¡ °¡´Â ¹æÇâÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. ¸Å¿ì ¾î·Á¿î ¼±ÅÃÀÌ¸ç ¿À·£ °æÇèÀÌ ÇÊ¿äÇÑ ºÎºÐÀÌ´Ù.

 

4 µ¥ÀÌÅÍ °Ç¼ö°¡ ¸¹¾Æ¼­ µµÀúÈ÷ ¼Óµµ °³¼±ÀÌ Èûµé´Ù?

 

ÁøÂ¥ ¹«Áö¸·ÁöÇÏ°Ô Å« µ¥ÀÌÅ͸¦ °¡Áø Å×ÀÌºí³¢¸®ÀÇ Á¶ÀÎÀº Ç® ½ºÄµ¿¡ Çؽà Á¶ÀÎ ÇÔ¼ö¸¦ ¾²´õ¶óµµ Èûµç °æ¿ì°¡ ¸¹´Ù. ÀÌ·± °æ¿ì¿¡´Â Æз¯·²(PARALLEL) ¿É¼ÇÀ» ÈùÆ® Àý¿¡ Ãß°¡ÇØ ¼Óµµ¸¦ °³¼±ÇÏ´Â °ÍÀÌ °¡Àå ¼Õ½¬¿î Æ©´× ¹ýÀÌ´Ù. ÀÌ·¡µµ ¾È µÈ´Ù¸é ÇÁ·Î¼¼½º¸¦ Àß°Ô ³ª´©¾î º´·Ä 󸮸¦ ÇØ¾ß Çϴµ¥ ÀÌ´Â ÇÁ·Î±×·¥À» ¼öÁ¤ÇØ¾ß ÇϹǷΠºÎ´ãÀÌ ¸¹ÀÌ µÇ´Â ÀÛ¾÷ÀÌ´Ù. ÀÏ´Ü Æз¯·² ¿É¼ÇÀ» »ç¿ëÇϱâ À§Çؼ­´Â ÈùÆ®¿¡ ´ÙÀ½°ú °°ÀÌ ½áÁÖ¸é µÈ´Ù.

/*+ PARALLEL(Å×ÀÌºí ¸í Æз¯·² ¼­¹ö °³¼ö) */

¿¹¸¦ µé¾î TAB1, TAB2, TAB3¶ó´Â Å×À̺íÀ» ¼­·Î Á¶ÀÎÇÏ¿© PARALLEL OPTIONÀ» ÁÖ°Ô µÇ¸é ´ÙÀ½°ú °°´Ù.

SELECT /*+ PARALLEL(A 5) PARALLEL(B 5) PARALLEL(C 5) */ * FROM TAB1 A, TAB2 B, TAB3 C
WHERE A.COL1 = B.COL1 AND
B.COL1 = C.COL1;

ÈùÆ® Àý¿¡ µÇµµ·Ï Æз¯·² ¿É¼Ç ¼ö¸¦ °°ÀÌ ¸ÂÃß¾î ÁÖ¸é ¼º´ÉÀ» Çâ»ó½Ãų ¼ö ÀÖ´Ù. ¿©·¯ºÐÀÌ Æз¯·² ¿É¼ÇÀ» »ç¿ëÇÏ´Â °æ¿ì Ç÷£ °á°ú¸¦ º¸¸é PARALLEL-TO-PARALLEL, SERIAL-TO-PARALLEL, PARALLEL-TO-PARALLELÀ̶ó´Â °ÍÀ» ¹ß°ßÇÑ´Ù. PARALLEL-TO-PARALLELÀ̶ó´Â °ÍÀÌ ³ªÅ¸³¯ ¶§ °¡Àå ÁÁÀº ¼º´ÉÀ» ¹ßÈÖÇÑ´Ù. ¿ì¼±¼øÀ§¿¡¼­ ÀÐÀº °á°ú¸¦ ´ÙÀ½ º´·Ä ÇÁ·Î¼¼¼­·Î °è¼ÓÀûÀ¸·Î ³Ñ±â±â ¶§¹®¿¡ ÁÁÀº °á°ú¸¦ ³Ñ±â´Â °ÍÀÌ´Ù. ¸¸¾à µÎ °³ ÀÌ»óÀÇ Å×À̺íÀ» Á¶Àνÿ¡ ÃÖÀûÀÇ ¼º´ÉÀ» ³»±â À§Çؼ­´Â µÇµµ·Ï °°Àº ¼ö¸¦ ÁöÁ¤ÇØ ÁÖ¾î¶ó.

±×·¯³ª Æз¯·² ¿É¼ÇÀº °úµµÇÑ CPU ºÎÇϸ¦ °¡Áö°í ¿Ã ¼ö ÀÖ´Ù. CPU °³¼ö¸¦ ÃÊ°úÇÏ´Â Æз¯·² ¿É¼ÇÀº º°·Î µµ¿òÀÌ ¾È µÈ´Ù. ±×·¯¹Ç·Î ÇÁ·Î¼¼½º¸¦ ºü¸£°Ô ¼öÇàÇÏ°íÀÚ ÇÏ´Â ¿å½É¿¡ º´·Ä ÇÁ·Î¼¼¼­¸¦ ³Ê¹« ¸¹ÀÌ ¶ç¿î´Ù¸é ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡ ¹æÇØ°¡ µÇ¸ç, ÀÚ½ÅÀÇ ÇÁ·Î¼¼¼­¿¡µµ °áÄÚ µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù.

±×¸®°í DDL ¹®Àå¿¡ Æз¯·² ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é ÇØ´ç Å×ÀÌºí ½ºÆäÀ̽ºÀÇ µðÆúÆ® INITIAL_EXTENT, NEXT_EXTENT ÀÇ ½ºÅ丮Áö Àý¿¡ À¯ÀÇÇØ¾ß ÇÑ´Ù. º´·Ä ÇÁ·Î¼¼¼­°¡ Ãʱ⿡ ÀÌ ½ºÅ丮Áö ÀýÀÇ ¿É¼ÇÀ» ±×´ë·Î Àû¿ëÇϱ⠶§¹®ÀÌ´Ù.


5 DB°¡ ¹®Á¦Àΰ¡¿ä? ³» SQL¹®ÀÌ ¹®Á¦Àΰ¡¿ä?

 

°³¹ßÀÚµéÀº ÇÁ·Î¼¼½º°¡ ¼öÇàÀÌ ´À·ÁÁö¸é ¸ÕÀú ¼­¹ö³ª µ¥ÀÌÅͺ£À̽ºÀÇ ¼º´ÉÀ» ÀǽÉÇÏ°Ô µÈ´Ù. ±×·¯³ª ¼­¹ö°¡ °èȹ ÇÏ¿¡ µµÀԵǾú´Ù¸é ±×·² °¡´É¼ºÀº Èñ¹ÚÇÏ´Ù. °¡Àå È®½ÇÇÑ ¹æ¹ýÀº ¿À¶óŬÀÇ ¼º´É ºä¸¦ Á¶È¸¸¦ ÅëÇØ ¾Ë ¼ö ÀÖÁö¸¸ ´ÙÀ½ ȸ¿¡ ´Ù·ç±â·Î ÇÏ°í SQLÀÌ ¹®Á¦ÀÎÁö µ¥ÀÌÅͺ£À̽º³»ÀÇ ¹®Á¦ÀÎÁö¸¦ ½±°Ô ÆǺ°ÇØ º¸±â·Î ÇÏÀÚ. °£´ÜÇÏ´Ù.

µ¥ÀÌÅͺ£À̽º¿¡ ¹®Á¦°¡ ¹ß»ýÇÑ °ÍÀ̶ó¸é SQLPLUS°¡ Á¦´ë·Î Á¢¼ÓµÇÁö ¾Ê°Å³ª ¾öû ´À¸®°Ô Á¢¼ÓµÈ´Ù. ¶ÇÇÑ ps ?ef|grep ÇÁ·Î±×·¥¸íÀ» Ä¡¸é ¼ýÀÚ°¡ µÎ °³ ³ª¿À´Â µ¥ ¼­¹ö¿¡¼­ SQL*NETÀ» ÅëÇÏÁö ¾ÊÀº °æ¿ì µÞ ¼ýÀÚ°¡ ÇØ´ç ÇÁ·Î±×·¥°ú ¿¬°áµÈ ¿À¶óŬ ¼­¹ö ÇÁ·Î¼¼½º ¹øÈ£ÀÌ´Ù.

Ps ?ef|grep ÇÁ·Î¼¼½º ID¸¦ ÇÏ¸é µ¥ÀÌÅͺ£À̽º¿Í ¿¬°üµÈ ÀÛ¾÷À» ÇÏ°í ÀÖÀ» °æ¿ì ºÐ¸í CPU Á¡À¯À² ¶Ç´Â »ç¿ë·®ÀÌ º¯Çϱ⠸¶·ÃÀÌ´Ù. ÀÌ ¼ýÀÚ°¡ º¯ÇÏ°í Àִµ¥ ´À¸®´Ù¸é ºÐ¸í ÀÚ½ÅÀÇ SQL¹®ÀÌ ¹º°¡ ¹®Á¦°¡ ÀÖ´Ù°í º¸°í Ç÷£À» ÀÛ¼ºÇØ ºÐ¼®ÇØ ºÁ¾ß ÇÑ´Ù.

ÇöÀç ÇÁ·Î±×·¥À» ¼öÇà ÁßÀ̾ ¾î¶² SQL¹®ÀÌ ¼öÇàµÇ´ÂÁö ¸ð¸¥´Ù¸é ´ÙÀ½ÀÇ SQL¹®À» ½ÇÇàÇØ º¸±â ¹Ù¶õ´Ù. ¸ÕÀú v$sessionÀ̶ó´Â ¼º´É ºä¿¡¼­ ÀÚ½ÅÀÇ ÇÁ·Î¼¼½º¿¡ ÇØ´çÇÏ´Â SID¸¦ ãÀº ´ÙÀ½(±ÇÇÑÀÌ ¾ø´Ù°Å³ª Àß ¸ð¸¥´Ù¸é ´ÙÀ½¿¡ ÀÚ¼¼È÷ ¼³¸íÇÒ Å×ÀÌ´Ï DBAÀÇ µµ¿òÀ» ¹ÞÀ» °Í) ÇØ´ç SQLÀ» ½ÇÇàÇÏ°í SQL¹®À» ¼öÇàÇØ º¸¾Æ¶ó. ÀÚ½ÅÀÌ ¸¶Áö¸·À¸·Î ¼öÇàÇÑ SQL¹®ÀÌ º¸ÀÏ °ÍÀÌ´Ù. À̸¦ ¹Ýº¹ÇÏ¸é ¼öÇàÀÌ ¿À·¡ °É¸®´Â SQL¹®ÀÌ ½±°Ô º¸ÀÏ °ÍÀÌ´Ù. Æ©´× ÅøÀ» ÀÌ¿ëÇÏ¸é ´õ¿í ½±°Ô ¾Ë ¼ö ÀÖ´Ù.

col piece for 999
col sql_text for a85
select a.piece,b.osuser,b.process,a.sql_text
from v$sqltext_with_newlines a, v$session b
where a.address=b.sql_address and b.sid=&SID
order by 1 asc
/

¸¸¾à º¯ÇÏ°í ÀÖÁö ¾Ê´Ù¸é LOCKÀ» ÀǽÉÇØ º¸°í ´ÙÀ½ÀÇ SQL¹®À» ½ÇÇà½ÃÄÑ º¸±æ ¹Ù¶õ´Ù.

<¸®½ºÆ® 2> Á¦¸ñ
column username format a10
column sid format 999
column lock_type format a25
column MODE_HELD format a11
column MODE_REQUESTED format a10
column LOCK_ID1 format a8
column LOCK_ID2 format a8

select
a.sid,
decode(a.type,
'MR', 'Media Recovery',
'RT', 'Redo Thread',
'UN', 'User Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL User Lock',
'DX', 'Distributed Xaction',
'CF', 'Control File',
'IS', 'Instance State',
'FS', 'File Set',
'IR', 'Instance Recovery',
'ST', 'Disk Space Transaction',
'IR', 'Instance Recovery',
'ST', 'Disk Space Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalidation',
'LS', 'Log Start or Switch',
'RW', 'Row Wait',
'SQ', 'Sequence Number',
'TE', 'Extend Table',
'TT', 'Temp Table',
a.type) lock_type,
decode(a.lmode,
0, 'None', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Exclusive', /* X */
to_char(a.lmode)) mode_held,
decode(a.request,
0, 'None', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Exclusive', /* X */
to_char(a.request)) mode_requested,
to_char(a.id1) lock_id1, to_char(a.id2) lock_id2
from v$lock a
where a.type not in ('MR', 'DM', 'RT')
and (id1,id2) in
(select b.id1, b.id2 from v$lock b where b.id1=a.id1 and
b.id2=a.id2 and b.request>0)
order by 5,6
/

ÀÌ SQL¹®À» ¼öÇàÇÑ´Ù¸é ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ¿µÇâÀ¸·Î LOCKÀÌ °É¸° °ÍÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ¸¸¾à µ¥ÀÌÅͺ£À̽º¿¡ ¹®Á¦°¡ ÀÖ´Ù¸é <¸®½ºÆ® 2>

ÀÇ µÎ SQL¹®Àº Á¶È¸Á¶Â÷ µÇÁö ¾Ê´Â´Ù. ÀÌÁ¦ ´À¸®´Ù°í ´Ù¸¥ »ç¶÷ÀÇ ÇÁ·Î¼¼½º Å¿À̶óµçÁö, µ¥ÀÌÅͺ£À̽º°¡ ´À¸®´ÙµçÁö ÇÏ´Â ¿À·ù´Â ¹üÇÏÁö ¾Ê±æ ¹Ù¶õ´Ù.


6 ¿Â¶óÀÎ ÇÁ·Î±×·¥¿¡¼­ ¸ñÇ¥ ½Ã°£³» ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇÁö ¾Ê¾Æ¿ä

 

Á¤½Å¾øÀÌ ¼³¸íÇÏ´Ù º¸´Ï Àá½Ã ¸Ó¸®¸¦ ½ÄÈ÷¶ó´Â Àǹ̿¡¼­ Àû¾ú´Ù. ¿Â¶óÀÎ ÇÁ·Î±×·¥ÀÎ °æ¿ì Á¶È¸ Á¶°ÇÀÌ ±î´Ù·Ó°í °Ç¼ö°¡ ¸¹Àº Å×À̺íÀº ¼Óµµ¸¦ ÁÙÀ̴µ¥ ÇÑ°è°¡ ÀÖ´Ù. ½ÉÁö¾î ÀϺΠÇÁ·ÎÁ§Æ®¿¡¼­´Â ¡®¿Â¶óÀÎ ÇÁ·Î±×·¥ ¼öÇà ¸ñÇ¥½Ã°£À» 3ÃÊ À̳»¡¯¶ó°í Àý´ëÀûÀÎ ¼öÄ¡¸¦ Á¤ÇØ ³õ°í ¹«Á¶°Ç ½Ã°£ ÃÊ°ú ½Ã¿¡´Â ºÒÇÕ°ÝÀ» ¼±¾ðÇϱ⵵ ÇÑ´Ù. ÇÏÁö¸¸ ÇÊÀÚ´Â ÀÌ·± °æ¿ìµµ ¹«³­È÷ Åë°úÇß´Ù.

´ë°³ Æ©´×À» Çصµ ¾È µÇ´Â Á¶È¸ È­¸éÀº ´ë°³ °Ç¼ö°¡ ¸¹Àº Å×À̺íÀ» ´Ù¾çÇÑ °Ë»ö Á¶°ÇÀ» ÅëÇØ ºÐ¼®¿ë ÇÁ·Î±×·¥ÀÌ ¸¹´Ù. À̴ ƯÁ¤ »ç¿ëÀÚ°¡ ÀÏ ¸îȸ ¹Ì¸¸À¸·Î »ç¿ëÇÏ´Â °ÍÀÌ ´ëºÎºÐÀÌ´Ù. À̸¦ ¾ïÁö·Î Æ©´×ÇÏ´À¶ó ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ Ãß°¡Çϰųª À妽º¸¦ Ãß°¡ÇÑ´Ù¸é ÀÌ´Â µæº¸´Ù ½ÇÀÌ ¸¹´Ù.

¿Â¶óÀÎ ÇÁ·Î±×·¥Àº »ç¿ëÀÚ¿ÍÀÇ ´ëÈ­ÀÌ´Ù. À̵éÀÌ °©°©ÇÏ°Ô ¿©±â´Â °ÍÀº ¿£Å͸¦ Ä£ ´ÙÀ½ PC°¡ ´Ù¿îµÈ °Íó·³ ¾Æ¹«·± ¸Þ½ÃÁö ¾øÀÌ ¸¶¿ì½ºÀÇ ¸ð·¡½Ã°è¸¸ µ¹´Ù°¡ ¼ö½Ê ÃÊ °æ°ú ÈÄ Á¶È¸µÇ´Â °ÍÀÌ´Ù. ±×¸®°í °Ç¼ö°¡ ¸¹Àº Å×À̺íÀ» ºÐ¼®¿ëÀ¸·Î »ç¿ëÇÏ´Â °ÍÀº ¿ù 1¢¦2ȸÀÇ ÇÑÁ¤µÈ »ç¿ëÀÚ¸¸ÀÌ »ç¿ëÇÑ´Ù. ÀÌ·± ÇÁ·Î±×·¥Àº Á¶È¸ ¹öÆ°À» ´©¸£ÀÚ¸¶ÀÚ ¡®Àá½Ã¸¸ ±â´Ù¸®¼¼¿ä¡¯¶ó´Â ¸Þ½ÃÁö ¹Ú½º¸¦ ¶ç¿ö¶ó. ÇÑ ¸Þ½ÃÁö ¹Ú½º¸¦ ¶ç¿ì´Â °Í¸¸À¸·Î´Â ºÎÁ·ÇÏ´Ù. ¿Ö³ÄÇÏ¸é ¶Ç È­¸éÀÌ °¡¸¸È÷ ÀÖÀ» Å״ϱî. ¡®µ¥ÀÌÅ͸¦ ó¸® ÁßÀÔ´Ï´Ù¡¯ °è¼Ó 3ÃÊ °£°ÝÀ¸·Î ¹ø°¥¾Æ ¸Þ½ÃÁö¸¦ º¸¿©ÁÖ¶ó. ³²Àº ½Ã°£À» º¸¿©Áְųª ³²Àº ó¸® °Ç¼ö¸¦ º¸¿©ÁØ´Ù¸é ´õ¿í È¿°úÀûÀÌ´Ù. ¹°·Ð Áõ±Çȸ»çÀÇ ÁÖ¹® µî·Ï °°Àº ¿Â¶óÀÎ ÇÁ·Î±×·¥À» ÀÌ·¸°Ô Çؼ­´Â ¾È µÈ´Ù. ÇÏÁö¸¸ ÀÔÂû ¾È³»¼­³ª ¿ä±¸»çÇ×ÀÌ ¸í½ÃµÇ¾î Àý´ëÀûÀÎ ±âÁØÀ» »ï°Å³ª »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥ÀÌ ´À¸®´Ù°í ºÒÆòÇÑ´Ù¸é ÀÌ·¸°Ô Çغ¸¶ó. ½Å±âÇÏ°Ôµµ »ç¿ëÀÚ´Â ¾Æ¹« ¸» ¾ÈÇÑ´Ù.


7 Æз¯·² ¿É¼ÇÀ» ÁÖ¾ú´Âµ¥ ¼Óµµ°¡ ³ªÁö ¾Ê¾Æ¿ä

 

À̷лóÀ¸·Î´Â ¾Ë°í ÀÖ¾úÁö¸¸ ¾ð¶æ »óȲÀÌ µÇ¸é ¶°¿À¸£Áö ¾Ê´Â ¶§°¡ ÀÖ´Ù. µ¥ÀÌÅÍ ÀÌÇàÀ» ÇÏ¿´À» ¶§ °æÇèÇÑ °ÍÀÌ´Ù. ¹é¾÷ ¼­¹ö¿¡¼­ ¸îÀÏ °£À» Å×½ºÆ®Çϸ鼭 ÇÏ·ç ÀÌ»ó °É¸®´ø ÇÁ·Î¼¼½º¸¦ 2½Ã°£ À̳»·Î ÁÙÀ̴µ¥ ¼º°øÀ» Çß´Ù. ½ÇÇ༭¹ö¿¡¼­ »õ·Î À¯Àú¸¦ ¸¸µé¾î ÇÁ·ÎÁ§Æ® ¿ÀÇ ¸î ÀÏÀü ÃÖÁ¾ ¸®Çã¼³À» ÇÏ°Ô µÇ¾ú´Ù. ±×·±µ¥ ÀÌ°Ô À¢ÀÏÀΰ¡. 2½Ã°£ÀÌ¸é ³¡³µ´ø ÇÁ·Î¼¼½º°¡ 5½Ã°£À» ³Ñ¾îµµ ³¡³ªÁö ¾Ê´Â °ÍÀ̾ú´Ù. ¸ð´ÏÅ͸µ Çغ¸´Ï Æз¯·² ¿É¼ÇÀÌ ¸ÔÈ÷Áö ¾ÊÀº °ÍÀ̾ú´Ù. ¡°½ÇÇà ¼­¹ö´Â CPUµµ ¹é¾÷ ¼­¹öº¸´Ù ¸¹Àºµ¥¡¦¡± ¹®Á¦´Â MAX_PARALLEL_SERVER °³¼ö°¡ ¹é¾÷ ¼­¹öº¸´Ù ÀÛ°Ô ÀâÇôÁ® ÀÖ¾ú´Ù. °ø±³·Ó°Ôµµ ½ÇÇà ¼­¹ö¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼¼­´Â ´Ù ÁߴܽÃÄ״µ¥ µ¥ÀÌÅÍ ¹é¾÷ ÇÁ·Î¼¼¼­°¡ ¼öÇàµÇ¸é¼­ 10°³ Á¤µµ¸¦ »ç¿ëÇÏ°í ÀÖ¾ú´ø °ÍÀÌ´Ù. Æз¯·² ¿É¼ÇÀº ¾Õ¿¡¼­ ¸»ÇÑ´ë·Î CPU °³¼ö¸¦ ÃÊ°úÇÏ¸é ±×¸® È¿·ÂÀÌ ¾ø´Ù. ¶ÇÇÑ ÃÑ ¼öÇàµÇ´Â Æз¯·² ¼­¹ö °³¼ö°¡ MAX_PARALLEL_SERVER °³¼ö¸¦ ÃÊ°úÇÑ´Ù¸é º´·Ä ¼­¹ö´Â ¼öÇàµÇÁö ¾Ê´Â´Ù. ¸¸¾à ÀÌ°ÍÀÌ ½ÇÁ¦ ÀÌÇà½Ã ÀϾ´Ù¸é ºÐ¸í ÇÊÀÚ´Â ÇØ°íµÇ¾úÀ» °ÍÀÌ´Ù. ¹®Á¦´Â ¿¹±âÄ¡ ¾ÊÀº °÷¿¡¼­ ƯÈ÷ ÀÚ½ÅÇÏ°í üũÇÏÁö ¾Ê´Â ºÎºÐ¿¡¼­ ÀϾ´Ù´Â »ç½ÇÀ» ±â¾ïÇϱ⠹ٶõ´Ù.


8 ¿¹Àü¿¡´Â »¡¸® ¼öÇàµÇ¾ú´Âµ¥ Áö±ÝÀº ¼Óµµ°¡ ¾È³ª¿ä

 

À妽ºÀÇ Ãß°¡³ª º¯°æ


ÇÁ·Î±×·¥ÀÌ ÀÛ¼ºµÈ ÀÌÈÄ ½Å±Ô·Î Ãß°¡µÇ°Å³ª Ä÷³ÀÌ º¯°æµÈ À妽º°¡ ¿µÇâÀ» ¹ÌÄ¡´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î WHERE °í°´ID LIKE ¡®200310% AND °í°´À¯Çü = ¡®±â¾÷¡¯À̶õ Á¶°Ç ÀýÀÌ ÀÖ´Ù¸é ÀÌ SQL¹®ÀÌ ÀÛ¼ºµÇ±â Àü¿¡ ¾ø¾ú´ø °í°´ À¯ÇüÀÌ Ã¹ Ä÷³À¸·Î ½ÃÀÛÇÏ´Â À妽º°¡ ½Å±Ô·Î Ãß°¡µÇ¾ú´Ù°í °¡Á¤ÇÏÀÚ. ÀÌ·± °æ¿ì ¡®=¡¯ Á¶°ÇÀÌ ¿ì¼±ÇÒ ¼ö ÀÖÀ¸¹Ç·Î °í°´ ID¸¦ Ä÷³À¸·Î ÇÑ À妽º¸¦ »ç¿ëÇÏ´Ù°¡ °í°´ À¯ÇüÀ¸·Î ½ÃÀÛÇÏ´Â À妽º¸¦ »ç¿ëÇϵµ·Ï ¹Ù²ð ¼ö ÀÖ´Ù.

±×·¯¹Ç·Î Àüü ÇÁ·ÎÁ§Æ®ÀÇ °üÁ¡¿¡¼­ º¼ ¶§ ÀÚ±â È¥ÀÚ¼­ ÀßÇÑ´Ù°í µÇ´Â °ÍÀÌ ¾Æ´Ï´Ù. ´Ù¸¥ ÆÀ°ú °øÀ¯Çؼ­ »ç¿ëÇÏ´Â Å×ÀÌºí¿¡ ´ëÇؼ­´Â ½ºÅ°¸¶ º¯µ¿ ³»¿ªÀ» ¹Ýµå½Ã °øÀ¯ÇØ¾ß ÇÑ´Ù.

µ¥ÀÌÅÍ °Ç¼ö Áõ°¡, ºÐÆ÷µµ º¯°æ


ÀÌ´Â °³¹ßȯ°æ¿¡¼­´Â ¸î °Ç ¾È µÇ´Â ½ÃÇè¿ë µ¥ÀÌÅ͸¦ »ç¿ëÇϸç, ÇÁ·ÎÁ§Æ® Ãʱ⿡´Â µ¥ÀÌÅÍ°¡ ¸¹ÀÌ ´©ÀûµÇÁö ¾Ê¾Æ ½Ã°£ÀÌ Áö³ª¸é Áö³¯¼ö·Ï ¼Óµµ°¡ Á¡Á¡ ÀúÇÏµÇ¾î ³ªÁß¿£ Çϵå¿þ¾î Áõ¼³À̶óµçÁö ´ë´ëÀûÀÎ ¾ÖÇø®ÄÉÀÌ¼Ç Æ©´×À» ÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ÀÌ´Â Á¤¸»·Î ½É°¢ÇÑ ¹®Á¦´Ù.

ÀÌ´Â °¢°¢ÀÇ Å×ÀÌºí¿¡ ´ëÇØ µð½ºÅ© º¸°ü ÁÖ±â¶ó´Â °³³äÀÌ ¾øÀÌ °è¼Ó µ¥ÀÌÅ͸¦ ´©ÀûÇØ ³ª°¡´Â Çö½Ç°úµµ ¹«°üÇÏÁö ¾Ê´Ù. ¾÷¹« ¼³°è½Ã ½Ã°£ °³³ä°ú ¸¶°¨ °³³äÀÌ µµÀÔµÇÁö ¾Ê´Â´Ù¸é ÀÌ ¹®Á¦´Â ½±»ç¸® ÇØ°áµÇÁö ¾Ê´Â´Ù. Áï, Àå±â°£ º¸°üÇؼ­ »ç¿ëÇÒ µ¥ÀÌÅ͸¦ µû·Î ¾î¶»°Ô °ü¸®ÇÒ °ÍÀÎÁö Àü·«À» ¼ö¸³ÇØ¾ß ÇÑ´Ù. Åë°è Å×À̺íÀ» ¸¸µé°í ÀÏÁ¤ ±â°£ÀÌ Áö³­ »ó¼¼ Å×À̺íÀº µû·Î ¹é¾÷ Å×À̺í·Î ¿Å±ä´ÙµçÁö ÇÏ¿© ÇöÀç ¾÷¹«¸¦ ÁøÇàÇÏ°í ÀÖ´Â µ¥ÀÌÅÍ°¡ °ú°Å µ¥ÀÌÅÍ¿Í °°ÀÌ ¼¯¿© ÀÖ¾î ÇöÀç ¾÷¹«°¡ Áö¿¬µÇ´Â °ÍÀ» ¸·¾Æ¾ß ÇÑ´Ù.

¿¹¸¦ µé¾î ¸ÅÃâ Å×À̺íÀ» µéÀÚ¸é ÃÖ±Ù 3³âÄ¡¸¸ º¸°üÇÏ°í 3³âÀÌ Áö³­ µ¥ÀÌÅÍ´Â ¹é¾÷ ¸ÅÃâ µ¥ÀÌÅÍ·Î ¿Å°Ü¶ó. ±×¸®°í Àå±â ºÐ¼®ÇÏ´Â µ¥ÀÌÅ͸¦ ºÐ¼®ÇÏ´Â ÇÁ·Î±×·¥Àº ½ÇÁ¦ ¸ÅÃâ Å×À̺í°ú ¹é¾÷ ¸ÅÃâ Å×À̺íÀ» ¹­¾î Á¶È¸Çϵµ·Ï Çضó. ºÐ¼®Àº ¾î´À Á¤µµ ½Ã°£ÀÌ °É·Áµµ Å©°Ô ¹®Á¦°¡ ¾È µÇÁö¸¸ ½ÇÁ¦ À̹ø ´Þ ¸ÅÃâÀ» ó¸®Çϱâ À§ÇÑ Å×À̺íÀº ÈξÀ °¡º­¿öÁö±â ¶§¹®¿¡ »ó´çÇÑ ¼º´É °³¼±È¿°ú°¡ ³ªÅ¸³­´Ù.


9 ÆÄƼ¼Ç Å×À̺íÀÇ »ç¿ë

 

°Ç¼ö°¡ ¸¹Àº Å×À̺íÀº ÆÄƼ¼Ç Å×À̺íÀ» °í·ÁÇØ ÁÖ¾î¾ß ÇÑ´Ù. ÆÄƼ¼Ç Å×À̺íÀº ¿À¶óŬ 8 ¹öÀüºÎÅÍ Áö¿øµÈ´Ù. ÇÊÀÚ´Â ¿À¶óŬÀÌ ÆÄƼ¼Ç Å×ÀÌºí ±â´ÉÀ¸·Î ÀÎÇÏ¿© ¸í½Ç»óºÎÇÏ°Ô ´ë¿ë·® µ¥ÀÌÅͺ£À̽ºÀÇ ¹ßÆÇÀ» ÀÌ·èÇÏ¿´´Ù°í º»´Ù. ÆÄƼ¼Ç Å×À̺íÀº Å×À̺íÀ» ÆÄƼ¼ÇÀ̶õ °³³äÀ¸·Î ÂÉ°³¾î ³õ¾Æ WHERE Á¶°ÇÀýÀ» Çؼ®ÇÏ¿© ÇØ´ç Á¶°Ç¿¡ ¸Â´Â ÆÄƼ¼Ç¸¸ ¾×¼¼½ºÇÒ ¼ö ÀÖµµ·Ï ÇÑ °ÍÀÌ´Ù. µû¶ó¼­ 8¹ø¿¡¼­ ±â¼úÇÑ °Íó·³ ±»ÀÌ Å×À̺íÀ» ³ª´©Áö ¾Ê¾Æµµ ÆÄƼ¼Ç ±â´ÉÀ» ÀÌ¿ëÇÑ´Ù¸é È¿°úÀûÀ¸·Î ÃֽŠÁ¤º¸¿¡ ´ëÇÑ °ü¸®°¡ °¡´ÉÇÏ´Ù.

<±×¸² 3> ÆÄƼ¼ÇÅ×À̺íÀÇ »ç¿ë

ÆÄƼ¼Ç Å×À̺íÀ» »ç¿ëÇÔÀ¸·Î½á ¾ò´Â Å« ÀÌÁ¡ Áß Çϳª´Â ÀÛ¾÷À» º´·Äó¸® ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ƯÈ÷ ÀÌÇàÀ̳ª Å« ¹èÄ¡ ÀÛ¾÷½Ã ÆÄƼ¼Ç º°·Î ÇÁ·Î¼¼½º¸¦ µ¿½Ã¿¡ ¼öÇàÇÏ¿© È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
ÆÄƼ¼Ç Å×À̺íÀ» ¸¸µå´Â ¹æ¹ýÀº ADMINISTRATOR¡¯S GUIDE¸¦ Âü°íÇϱ⠹ٶõ´Ù. ƯÈ÷ EXCHANGE PARATITION À̶õ ±â´ÉÀº Å« µ¥ÀÌÅ͸¦ Áö´Ñ Å×À̺íÀ» °ü¸®ÇÏ´Â DBA¶ó¸é ´«¿©°Ü º¸±æ ¹Ù¶õ´Ù.


 

10 ÀÌ·ÐÀº ¾Ë°Ú´Âµ¥ ¸·»ó ´ÚÄ¡¸é ¾î¶»°Ô ÇØ°áÇØ¾ß ÇÒ±î¿ä

 

Æ©´×¿¡ °ü½ÉÀÌ ÀÖ¾ú´ø µ¶ÀÚµéÀº ¾Æ¸¶ ÇÊÀÚ°¡ ±â¼úÇÑ ³»¿ëÀ» ´Ù¸¥ Ã¥¿¡¼­µµ ¸¹ÀÌ ºÁ¿ÔÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ½ÇÁ¦ÀûÀ¸·Î OCP¿¡ Æ©´× °ú¸ñÀÌ ÀÖÁö¸¸ Á¦´ë·Î Æ©´×À» ÇÒ ÁÙ ¸ð¸£´Â DBA°¡ ¸¹´Ù´Â °ÍÀº ½ÇÁ¦ ´ÚÃļ­ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â ´É·ÂÀ» Å°¿ì´Â °ÍÀÌ ½±Áö ¾Ê´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
¾ÆÁ÷ ½ÇÀüÀ» ÅëÇØ Æ©´× ¸¶Àε带 ½×¾Æ¾ß ÇÑ´Ù. ¾Õ¿¡¼­ ÇÊÀÚ°¡ ³ª¿­ÇÑ ³»¿ëÀ» ÀÚ¼¼È÷ »ìÆ캸¶ó. ±×·³ °øÅëÀûÀÎ »çÇ×ÀÌ µµÃâµÉ °ÍÀÌ´Ù. ÇÊÀÚ´Â Æ©´× ºñ¹ýÀ̶ó¸é µÎ °¡ÁöÀÇ Ãø¸é¿¡¼­ °è¼ÓÀûÀÎ ½Ã¹Ä·¹À̼ÇÀ» ÇØ º»´Ù´Â °ÍÀÌ´Ù.

(1) Àû°Ô Àаųª Àû°Ô ½ÇÇàµÇµµ·Ï ³ë·Â


=> ¾È Àо µÉ ºÎºÐÀÌ ÀÐÇôÁö°í ÀÖÁö´Â ¾ÊÀº°¡?
=> °á°ú¿Í »ó°ü¾ø´Â µ¥ÀÌÅÍ°¡ Á¶Àεǰí ÀÖÁö´Â ¾ÊÀº°¡?
=> Çѹø ÀÐÀº °ÍÀ» ¶Ç ÀÐÀº °ÍÀÌ ¾ø´Â°¡?
=> LOOP¹® ¾È¿¡¼­ÀÇ SQL¹® ½ÇÇà Ƚ¼ö Á¦°Å
=> ¸ÖƼ ºí·Ï ¾×¼¼½º(Ç® ½ºÄµ)°ú À妽ºÀÇ ºÎºÐ ¾×¼¼½ºÀÇ ´ëºñ ºÐ¼®
=> Áßø ·çÇÁ ¹æ½Ä°ú Çؽà Á¶ÀÎ Áß ¾î´À °ÍÀÌ ³ªÀº°¡?

(2) Æз¯·²(º´·Ä) ó¸® ±â¹ýÀ» ¹Ýµå½Ã È°¿ë


=> Æз¯·² ¿É¼ÇÀÇ ÀûÀýÇÑ È°¿ë
=> ÇÁ·Î¼¼½º ¼öÇà ´ÜÀ§¸¦ ÃÖ¼ÒÈ­ÇÏ¿© º´·Ä 󸮰¡ °¡´ÉÅä·Ï Á¶Á¤
=> THREAD ±â¹ýÀ» È°¿ëÇÑ º´·Ä ÇÁ·Î±×·¡¹Ö ±â¹ý Çâ»ó
=> ÀÛ¾÷ ½ºÄÉÁì ¼ö¸³À» ÅëÇÏ¿© ´©¼ö ½Ã°£À» ¹æÁö

Áï, ÀÌ·ÐÀ» °í¹ÎÇÏÁö ¸»°í µÎ °¡Áö ¿øÄ¢¿¡ ÀÇ°ÅÇÏ¿© µ¥ÀÌÅÍÀÇ ºÐÆ÷µµ¸¦ ÆľÇÇÏ°í Ç÷£À» ÀÛ¼ºÇϸ鼭 ¾î¶² °æ¿ìÀÇ ¼ö°¡ µ¥ÀÌÅ͸¦ Àû°Ô ÀÐÈ÷´Â°¡? ¾î¶² °æ¿ìÀÇ ¼ö°¡ µ¥ÀÌÅ͸¦ ÇѲ¨¹ø¿¡ ó¸®ÇÒ ¼ö Àִ°¡? ¾î¶² °æ¿ìÀÇ ¼ö°¡ ³»ºÎÀûÀÎ ½ÇÇà Ƚ¼ö¸¦ ÁÙÀ̴°¡¸¦ °í¹ÎÇØ º¸±æ ¹Ù¶õ´Ù.
±×¸®°í ¸¹Àº µ¥ÀÌÅÍ°¡ ÀÖÀ» °æ¿ì¿¡´Â µÇµµ·Ï º´·Ä ÇÁ·Î¼¼¼­(PARALLEL SERVER)¸¦ È°¿ëÇϵç ÇÁ·Î±×·¥À» º´·Ä·Î ¼öÇàÇÏµç º´·Ä ó¸® ±â¹ýÀ» ÀÍÇô¾ß ÇÑ´Ù.

¼º´É ÀúÇÏ ¿äÀÎÀ» ã¾Æ º¸ÀÚ

 

´ë·«ÀÇ 10°¡Áö À¯ÇüÀ» °¡Áö°í °³¹ßÀÚ°¡ ¹üÇϱ⠽¬¿î ¿À·ù³ª ÀÚÁÖ µé¾î¿Ô´ø Áú¹®À» Áß½ÉÀ¸·Î ¿©·¯ºÐ°ú °°ÀÌ °í¹ÎÇØ º¸¾Ò´Ù. °á·ÐÀûÀ¸·Î SQL Æ©´×Àº ¿Â¶óÀÎ ÇÁ·Î±×·¥¿¡¼­´Â µÇµµ·Ï Àû°Ô ÀÐÇôÁö°í Á¶ÀεǴ Ƚ¼ö¸¦ ÁÙÀ̵µ·Ï ³ë·ÂÇϸç, ¹èÄ¡¿¡¼­´Â µÇµµ·Ï ¸ÖƼºí·°À¸·Î ó¸®ÇÏ°í º´·Ä·Î ó¸®ÇØ ÁÖ´Â ³ë·ÂÀ» ÇØÁÖ´Â °ÍÀÌ¶ó º¸¸é µÈ´Ù. ¡°Àû°Ô ÀÐÀÚ, Àû°Ô Á¶ÀÎÇÏÀÚ, ¾µµ¥¾ø´Â ºÎºÐ ÀÐÁö ¸»ÀÚ, ¸ÖƼºí·° È°¿ëÇÏÀÚ, º´·Äó¸®ÇÏÀÚ¡± ¸Ó¸®¿¡ »õ°Ü¾ß ÇÑ´Ù.
óÀ½¿¡´Â ÀÌ·± ¹æ¹ýÀ¸·Î ¾×¼¼½º ¹æ½ÄÀ» ¶°¿Ã¸®°í ÇϳªÇϳª ÀÚ½ÅÀÌ DB ¿£ÁøÀÌ µÇ¾î ¾î¶² °ÍÀÌ È¿À²ÀûÀΰ¡¸¦ Ç÷£À» ÀÛ¼ºÇϸ鼭 ¿¬½ÀÇØ¾ß ÇÑ´Ù. ¸¶Áö¸· ȸ(5ȸ)¿¡ Á¾ÇÕ ÆíÀ¸·Î ¿À´Ã ±â¼úÇÑ ³»¿ë¿¡ ´ëÇØ ½ÇÁ¦·Î ¸¹Àº µ¥ÀÌÅ͸¦ ¹ß»ý½ÃÄÑ ½Ç½ÀÇØ º¼ °ÍÀÌ´Ù. ´ÙÀ½ ½Ã°£¿¡´Â ¼º´É ºä¸¦ ÅëÇÏ¿© ¼º´ÉÀúÇÏ ¿äÀÎÀ» ã´Â ¿¬½ÀÀ» Çغ¸±â·Î ÇÏÀÚ.



¿ÉƼ¸¶ÀÌÀú È°¿ë ¿¹Á¦

ÀÌÁ¦ºÎÅÍ ¿©·¯ºÐÀÌ ¿ÉƼ¸¶ÀÌÀú¶ó°í »ý°¢ÇÏ°í ´ÙÀ½ÀÇ È°¿ë ¿¹Á¦¸¦ ÆÇ´ÜÇØ º¸ÀÚ. ¸ðµç ¹®Á¦¸¦ ÀÛ°Ô Àаí Á¶ÀΠȽ¼ö¸¦ ÁÙÀ̸ç, ¸ÖƼºí·° READ, º´·Ä ó¸®ÀÇ °üÁ¡¿¡¼­ ¾î´À °ÍÀÌ À¯¸®ÇÑÁö¸¦ ÆÇ´ÜÇÏ°í Á¢±ÙÇØ¾ß ÇÑ´Ù.

È°¿ë 1 : ÀÐÇôÁö´Â Ƚ¼ö, ¹Ýº¹ÀûÀÎ READ ¾ø¾Ö±â
¿¹¸¦ µé¾î °°Àº °Ç¼öÀÇ ºÎ¼­¿Í »ç¿ø Å×À̺íÀÌ ÀÖ´Ù. ºÎ¼­ Å×À̺íÀº À妽º°¡ ÀÖ°í »ç¿ø Å×À̺íÀº À妽º°¡ ¾ø´Ù. À̸¦ Áßø ·çÇÁ ¹æ½ÄÀ¸·Î Á¶ÀÎÇÒ ¶§ ¾î´À Å×À̺íºÎÅÍ Àд °ÍÀÌ ºü¸£°Ú´Â°¡?

¡¡¡¡ SELECT »ç¿ø¸í, ºÎ¼­¸í FROM »ç¿ø, ºÎ¼­ WHERE »ç¿ø.ºÎ¼­ ÄÚµå = ºÎ¼­.ºÎ¼­ ÄÚµå

<Ç¥ 1>ÀÇ ¹Ú½º ¾È¿¡ ÀÖ´Â °ÍÀÌ ¸Å¹ø ¹Ýº¹ ½ÇÇàµÈ´Ù. ¾î´À °ÍÀÌ ºü¸£°Ú´Â°¡? ÇÑ ºÎ¼­ ´ç 1000°Ç µÇ´Â µ¥ÀÌÅ͸¦ ÀüºÎ ´Ù Àоî Á¶ÀÎÇÏ´Â °Íº¸´Ù´Â ´ç¿¬È÷ ÇѰǾ¿ Á¤È®ÇÏ°Ô Ã£¾Æ¿Ã ¼ö ÀÖ´Â 1¾ÈÀÌ ºü¸¦ °ÍÀÌ´Ù(¿Â¶óÀÎ). 1¾ÈÀ» °³¼±ÇÑ´Ù¸é Àüü-Àüü Å×À̺íÀÌ Á¶ÀεǹǷΠ¸ÖƼºí·° ¾×¼¼½º¸¦ ÇÏ´Â Ç® ½ºÄµÀ» È°¿ëÇÑ Çؽà Á¶ÀÎÀÌ ´õ È¿À²ÀûÀÏ °ÍÀÌ´Ù(¹èÄ¡).


<Ç¥1> ÀÎÅؽº »ç¿ëÀÇ ºñ±³ ¿¹

È°¿ë 2 : Á¶ÀΠȽ¼ö ÁÙÀ̱â

SELECT A.EMPNAME, SUM(B.SALARY) FROM EMP A, SALARY B
WHERE A.empno = B.empno AND b.date between ¡®20010101¡¯ AND ¡®20011231¡¯ GROUP BY A.EMPNAME

ÀÌ SQL¹®¿¡´Â ¹«½¼ ¹®Á¦°¡ Àִ°¡? ÀÌ´Â Á¶ÀΠȽ¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ´Â ¿ä¼Ò°¡ Àִµ¥ °£°úÇÑ °æ¿ìÀÌ´Ù.

SELECT /*+ ORDERED */ A.EMP_NAME, B.SALARY
FROM (SELECT EMPNO, SUM(SALARY) FROM SALARY WHERE DATE BETWEEN ¡®20010101¡¯ AND ¡®20011131¡¯
GROUP BY ENPNO) B,
EMP A
WHERE A.empno = B.empno;

¸ÕÀú SUMÀ» ÇÑ ´ÙÀ½ ±× °á°ú¸¦ °¡Áö°í Á¶ÀÎÀÌ ÀϾ±â ¶§¹®¿¡ Á¶ÀΠȽ¼ö°¡ ¸¹ÀÌ ÁÙ¾îµç´Ù.

È°¿ë 3 : UPDATE¹®¿¡¼­ÀÇ Á¶ÀÎ
UPDATE¹®Àº µ¥ÀÌÅ͸¦ º¯°æÇϱ⠶§¹®¿¡ ¶ô(Lock)À» °É°í ÀÛ¾÷À» ÇÏ°Ô µÈ´Ù. ±×·¸±â ¶§¹®¿¡ UPDATE SQL¹®À» Àß ¸ø »ç¿ëÇÏ¸é ¿Ï·á°¡ µÉ ¶§±îÁö ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¼öÇàµÇÁö ¸øÇÏ´Â °á°ú¸¦ ÃÊ·¡ÇÑ´Ù.

UPDATE TAB1 A SET COL2 = (SELECT COL2 FROM TAB2 WHERE COL1 = A.COL1)
WHERE COL1 IN (SELECT COL1 FROM TAB2)

ÀÌ¿Í °°ÀÌ Á¶ÀÎÀ» ÀÌ¿ëÇÑ UPDATE¹®Àº µÎ °¡ÁöÀÇ ÀζóÀÎ ºä(InLine-View)¸¦ °¡Áö´Â °æ¿ì°¡ ¸¹´Ù. ÀÌ·± °æ¿ì WHEREÀýÀº µ¥ÀÌÅÍÀÇ ºÐÆ÷µµ¿¡ µû¶ó À妽º¸¦ È°¿ëÇÑ Áßø ·çÇÁ ¹æ½ÄÀ¸·Î °¡µç ¾Æ´Ï¸é Çؽà Á¶ÀÎ ¹æ½ÄÀ¸·Î °æ¿ì¿¡ µû¶ó Á¶ÀýÇØ ÁÖ¾î¾ß ÇÏ°í, SETÀýÀÇ TAB2 Å×À̺íÀ» ÀÐÀ» ½Ã¿¡´Â ¹Ýµå½Ã À妽º¸¦ È°¿ëÇÑ Áßø ·çÇÁ ¹æ½ÄÀÇ Á¶ÀÎ ¹æ¹ýÀ» ÅÃÇØ ÁÖ¾î¾ß ÇÑ´Ù.
UPDATE¹®Àº WHEREÀý¿¡¼­ ÇØ´çÇÏ´Â ·Î¿ì(ROW)¸¦ °¡Áö°í ¿Í¼­ ÇÑ °Ç¸¶´Ù SETÀý ¾ÈÀÇ SQL¹®À» ¼öÇàÇϱ⠶§¹®ÀÌ´Ù. µû¶ó¼­ ¾ÕÀÇ °æ¿ì ¹Ýµå½Ã TAB2¿¡´Â COL1À» Á¦1 Ä÷³À¸·Î ÇÏ´Â À妽º°¡ ÀÖ¾î¾ß ÇÑ´Ù.

±× ¿Ü ÇÁ·Î±×·¥À» ´À¸®°Ô ÇÏ´Â ¿äÀÎ
  • °úµµÇÑ DECODE µîÀÇ ½Ã½ºÅÛ ÇÔ¼ö³ª À¯Àú°¡ Á¤ÀÇÇÑ ÇÔ¼ö¸¦ »ç¿ë
    DECODE(DECODE(DECODE¡¦¡¦¡¦¡¦¡¦¡¦) µîÀÇ ÇÔ¼ö¸¦ ¸¹Àº µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â SQL¹®¿¡ »ç¿ëÇϰųª À¯Àú°¡ FUNCTIONÀ» ÀÛ¼ºÇÏ¿© À̸¦ SQL¹®¿¡¼­ È£ÃâÇÑ °æ¿ì ÇÔ¼ö¿¡ ÀÖ´Â SQL¹®Àº ¹Ýµå½Ã Æ©´×µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.

  • µ¥ÀÌÅÍ Á¸Àç À¯¹« È®ÀÎÀ» À§ÇØ Á¶°Ç¿¡ ÇØ´çÇÏ´Â °Ç¼ö¸¦ ¸ðµÎ ¼¼´Â ÇàÀ§
    SELECT COUNT(*) FROM TAB1 WHERE COL1 = ¡®Á¶°Ç¡¯
    => SELECT ¡®X¡¯ FROM TAB1 WHERE COL1 = ¡®Á¶°Ç¡¯ AND ROWNUM = 1 (ÇѰǸ¸ ¼¼´Â °ÍÀ¸·Î ¹Ù²Þ, EXISTS ¹®ÀåÀ» ½áµµ ¹«¹æ)

  • ºÒÇÊ¿äÇÑ I/O¸¦ ÁÙÀ̱â
    Å×½ºÆ® ´Ü°èÀÇ µð¹ö±×³ª ·Î±×´Â ½ÇÇà½Ã¿¡´Â ÇʼöÀûÀÎ °Í¸¸ ³²±æ °Í. ƯÈ÷ printf¹®

  • »ç¼ÒÇÑ ¿À·ù³ª ÀÓÀÇÀÇ ¿À·ù´Â ÀÏ´Ü °Ç³Ê¶Ù°í ´Ù½Ã ó¸®ÇÒ °Í
    ¹«½¼ Á¶°Ç¸¸ ¾È ¸ÂÀ¸¸é ¹«Á¶°Ç ÇÁ·Î±×·¥À» ÁߴܽÃÄÑ ·Ñ¹é½ÃÅ°´Â °æ¿ì°¡ ÀÖ´Ù. ÇØ´ç ºÎ¸ð Å×ÀÌºí¿¡¼­ µ¥ÀÌÅ͸¦ ¸ø ãÀº °æ¿ì, INSERT½Ã µ¥ÀÌÅÍ°¡ Áߺ¹µÈ °æ¿ì µî ¾î¶² ƯÀÌÇÑ °æ¿ì·Î ¹ß»ýµÇ´Â ¿À·ù´Â µû·Î ·Î±ë ÆÄÀÏ¿¡ ½×¾Æ ºÐ¼®ÇÏ°Ô ÇÏ°í ¿¬¼ÓÀûÀ¸·Î ÀÌ·± ¿À·ù°¡ ³ª¿ÀÁö ¾Ê´Â´Ù¸é ÇÁ·Î±×·¥Àº ÀÏ´Ü Á¤»ó ¿Ï·á½ÃÄÑ¾ß ÁÁ´Ù.
    1000¸¸°Ç ÀÌ»óÀ» ó¸®ÇÏ´Â ÇÁ·Î±×·¥¿¡¼­ ¸·ÆÇ¿¡ ¾à°£ À߸øµÈ µ¥ÀÌÅÍ°¡ ÀÖ¾î 3°Ç Á¤µµ°¡ Áߺ¹µÅ¼­ Àüü µ¥ÀÌÅ͸¦ ·Ñ¹é ó¸®ÇÑ´Ù¸é ¾öû³­ ½Ã°£ÀûÀÎ ¼Õ½ÇÀÌ´Ù. ÀÏ´Ü 3°ÇÀ» ·Î±ëÇÏ°í ÇÁ·Î±×·¥À» Á¤»ó Á¾·á½ÃŲ ´ÙÀ½ ·Î±ë ÆÄÀÏÀ» º¸°í º°µµÃ³¸®¸¦ ÇÏ¸é µÈ´Ù. ÇÏÁö¸¸ Áߺ¹ÀÌ °è¼ÓÀûÀ¸·Î, ¿¹¸¦ µé¾î ¿¬¼ÓÀûÀ¸·Î 1000°Ç ÀÌ»ó Áߺ¹ÀÌ ÀϾ´Ù¸é ¹«¾ùÀΰ¡ À߸ø 󸮵ǰí ÀÖ´Â °æ¿ìÀ̹ǷΠÀÌ·± °æ¿ì´Â ÇÁ·Î±×·¥À» ÁߴܽÃÅ°¸é µÈ´Ù.

  • PRO*C¸¦ »ç¿ëÇÏ´Â °æ¿ì ARRAY ÇÁ·Î¼¼½Ì ÇÁ·Î±×·¡¹ÖÀ» ÇØ¾ß ÇÑ´Ù. I/O Ƚ¼ö¸¦ ÁÙ¿©Áֱ⠶§¹®¿¡ ÇѰǾ¿ ó¸®ÇÏ´Â °Í º¸´Ù ¸î ¹èÀÇ ½Ã°£ÀÌ ´ÜÃàµÈ´Ù. 2½Ã°£ÀÇ ÀÛ¾÷½Ã°£ÀÌ 10ºÐ À̳»·Î ÁÙ¾îµç´Ù. ¹Ýµå½Ã Ã¥À» º¸°í ÀÌ ºÎºÐÀº µû·Î ÀÍÈ÷±â¸¦ ¹Ù¶õ´Ù.
Âü°í : ÈùÆ®¿¡ ´ëÇÑ È°¿ë
ÀÚ½ÅÀÌ ¶æÇÏ´Â ´ë·Î ¿ÉƼ¸¶ÀÌÀú´Â ¿òÁ÷¿©ÁÖÁö ¾Ê´Â´Ù. ÀÌ·± ¶§¿¡´Â ÀûÀýÇÑ ÈùÆ®¸¦ ±¸»çÇÑ ÈÄ Ç÷£À» ÀÛ¼ºÇÏ¿© ÀÚ½ÅÀÌ ¿øÇÏ´Â ´ë·Î SQL ±¸¹®ÀÌ Çؼ®µÇ¾ú´ÂÁö¸¦ °ËÁõÇØ¾ß ÇÑ´Ù. ´ÙÀ½¿¡ ÀÚÁÖ ¾²ÀÌ´Â ÈùÆ®¸¦ ¸ð¾Æ ³õ¾Ò´Ù. ²À ¾Ë¾Æ¾ß ÇÒ ÈùÆ®´Â ±½°Ô Ç¥½ÃÇÏ¿´À¸´Ï ²À ¾Ë¾ÆµÎ±æ ¹Ù¶õ´Ù.
  • Optimizer ¸ðµå¿¡ ´ëÇÑ ÈùÆ®
    -. RULE
    ·ê ±â¹Ý ¿ÉƼ¸¶ÀÌÀú
    -. CHOOSE
    ÁÖ·Î ºñ¿ë ±â¹ÝÀ» À¯µµÇÏ°íÀÚ ÇÒ ¶§ »ç¿ë
    -. ALL_ROWS
    Àüü ¹üÀ§·Î ó¸®
    -. FIRST_ROWS
    ºÎºÐ ¹üÀ§·Î ó¸®

  • ACCESS PATH¿¡ ´ëÇÑ ÈùÆ®
    -. FULL : /*+ FULL (Å×À̺í¸í) */
    -. ROWID : /*+ ROWID (Å×À̺í¸í) */
    -. CLUSTER : /*+ CLUSTER (Å×À̺í¸í) */ CLUSTER¿¡ »ç¿ë
    -. HASH : /*+ HASH (Å×À̺í¸í) */ CLUSTER¿¡ »ç¿ë
    -. HASH_AJ : /*+ HASH_AJ */ Not IN½Ã »ç¿ë
    -. HASH_SJ : /*+ HASH_SJ (Å×À̺í¸í) */ EXISTS
    -. INDEX : /*INDEX (Å×À̺í¸í, À妽º¸í1, À妽º¸í2¡¦) */
    -. INDEX_ASC : /*+INDEX_ASC (Å×À̺í¸í, À妽º¸í) */
    -. INDEX_DESC : /*+INDEX_DESC (Å×À̺í¸í, À妽º¸í) */
    -. INDEX_FFS : /*+INDEX_FFS (Å×À̺í¸í, À妽º¸í) */
    -. MERGE_AJ : /*+MERGE_AJ */ NOT IN½Ã »ç¿ë
    -. MERGE_SJ : /*+MERGE_SJ */ EXISTS½Ã »ç¿ë
    -. AND_EQUAL : /*+AND_EQUAL (Å×À̺í¸í, À妽º¸í, À妽º¸í¡¦.) */
    -. USE_CONCAT : /*+USE_CONCAT */ ORÁ¶°ÇÀ» UNION ALL·Î

  • JOIN ¼ø¼­¿¡ ´ëÇÑ ÈùÆ®
    -. ORDERED : /*+ORDERED */ FROM ÀýÀÇ ¼ø¼­´ë·Î Å×À̺íÀ» ÀÐÀ½. ¹Ýµå½Ã WHEREÀýÀ» ¸ÂÃçÁÖ¾î¾ß ÇÔ

  • JOIN ¿¬»ê¿¡ ´ëÇÑ ÈùÆ®
    -. USE_NL : /*+USE_NL(Å×À̺í¸í,Å×À̺í¸í,..) */
    Áßø ·çÇÁ Á¶ÀÎ ¹æ½Ä
    -. USE_MERGE : /*+USE_MERGE(Å×À̺í¸í,Å×À̺í¸í,..) */
    Á¤·Ä º´ÇÕ Á¶ÀÎ ¹æ½Ä
    -. USE_HASH : /*+USE_HASH(Å×À̺í¸í,Å×À̺í¸í,..) */
    Çؽà Á¶ÀÎ ¹æ½Ä
    -. DRIVING_SITE : /*+DRIVING_SITE (Å×À̺í¸í,Å×À̺í¸í,..) */
    ¿ø°ÝÁö DB¿¡ ÀÖ´Â Å×À̺í°ú Á¶ÀνÃ

  • PARALLEL¿¡ ´ëÇÑ ÈùÆ®
    -. PARALLEL : /*+PARALLEL (Å×À̺í¸í,¼ýÀÚ1,¼ýÀÚ2) */
    -. NOPARALLEL : /*+NOPARALLEL (Å×À̺í¸í) */
    -. APPEND : INSERT /*+APPEND [PARALLEL..] */
    ºü¸¥ INSERT½Ã »ç¿ë, Áߴܽà À妽º ±úÁü
    -. NOAPPEND : INSERT /*+NOAPPEND */
    -. PARALLEL_INDEX : /*+PARALLEL_INDEX (Å×À̺í,
    -. NOPARALLEL_INDEX : /*+NOPARALLEL_INDEX (Å×À̺í, À妽º)*/

  • ±âŸ
    -. CACHE : /*+CACHE (Å×À̺í¸í) */
    -. NOCACHE : /*+NOCACHE (Å×À̺í¸í) */
    -. MERGE : /*+MERGE (Å×À̺í¸í) */
    -. NO_MERGE : /*+NO_MERGE (Å×À̺í¸í) */
    -. PUSH_JOIN_PRED : /*+PUSH_JOIN_PRED (Å×À̺í¸í) */
    (PUSH_JOIN_PREDICATE ÆĶó¹ÌÅÍ FALSE ¼³Á¤)
    -. NO_PUSH_JOIN_PRED : /*+NO_PUSH_JOIN_PRED (Å×À̺í¸í) */
    (PUSH_JOIN_PREDICATE ÆĶó¹ÌÅÍ TRUE ¼³Á¤)
    -. PUSH_SUBQ : /*+PUSH_SUBQ */


ÁÖÁ¦ : ¿©°¡/»ýÈ°/IT > ÄÄÇ»ÅÍ/ÀÎÅͳÝ

¡ãtop


hint »ç¿ë¹æ¹ý 2 Tip

/*+ ALL_ROWS */  
           explicitly chooses the cost-based approach to optimize a statement
           block with a goal of best throughput (that is, minimum
           total resource consumption)
           °¡Àå ÁÁÀº ´ÜÀ§ 󸮷®ÀÇ ¸ñÇ¥·Î ¹® ºí·ÏÀ» ÃÖÀûÈ­Çϱâ À§ÇØ cost-based  
           Á¢±Ù ¹æ¹ýÀ» ¼±ÅÃÇÕ´Ï´Ù. (Áï, ÀüüÀûÀÎ ÃÖ¼ÒÀÇ ÀÚ¿ø ¼Òºñ)
/*+ CHOOSE */  
           causes the optimizer to choose between the rule-based
           approach and the cost-based approach for a SQL statement
           based on the presence of statistics for the tables accessed by
           the statement
           ÃÖÀûÀÚ(optimizer)°¡ ±× ¹®¿¡ ÀÇÇØ Á¢±ÙµÈ Å×À̺íÀ» À§ÇØ Åë°èÀÇ Á¸Àç¿¡  
           ±Ù°Å¸¦ µÎ´Â SQL ¹®À» À§ÇØ rule-based Á¢±Ù ¹æ¹ý°ú cot-based Á¢±Ù ¹æ¹ý  
           »çÀÌ¿¡ ¼±ÅÃÇÏ°Ô ÇÕ´Ï´Ù.
/*+ FIRST_ROWS */  
           explicitly chooses the cost-based approach to optimize a statement
           block with a goal of best response time (minimum
           resource usage to return first row)
           °¡Àå ÁÁÀº ÀÀ´ä ½Ã°£ÀÇ ¸ñÇ¥·Î ¹® ºí·ÏÀ» ÃÖÀûÈ­Çϱâ À§ÇØ cost-based Á¢±Ù  
           ¹æ¹ýÀ» ¼±ÅÃÇÕ´Ï´Ù. (ù¹ø° ÇàÀ» µÇµ¹·Á ÁÖ´Â ÃÖ¼ÒÀÇ ÀÚ¿ø »ç¿ë)
/*+ RULE */  
           explicitly chooses rule-based optimization for a statement
           block
           ¹® ºí·ÏÀ» À§ÇÏ¿©, rule-based ÃÖÀûÈ­¸¦ °í¸£´Â



/*+ AND_EQUAL(table index) */  
           explicitly chooses an execution plan that uses an access path
           that merges the scans on several single-column indexes
           ±×¸¸Å­ ½ÇÇà °èȹÀ» ¼±ÅÃÇÕ´Ï´Ù. ±×¸®°í ¿©·µÀÇ single-column »öÀο¡  
           ±× scanÀ» ÇÕº´ÇÏ´Â Á¢±Ù °æ·Î¸¦ »ç¿ëÇÕ´Ï´Ù.
/*+ CLUSTER(table) */  
           explicitly chooses a cluster scan to access the specified table
           ¼±ÅÃÇÕ´Ï´Ù. ±×¸®°í, Ŭ·¯½ºÅÍ´Â ±× ¸í½ÃµÈ Å×À̺íÀ» Á¢±ÙÇϱâ À§ÇØ »ìÇÌ´Ï´Ù.
/*+ FULL(table) */  
           explicitly chooses a full table scan for the specified table
           ±× ¸í½ÃµÈ Å×À̺íÀ» À§ÇÏ¿©, Àüü Å×À̺í scanÀ» °í¸£´Â
/*+ HASH(table) */  
           explicitly chooses a hash scan to access the specified table
           ¼±ÅÃÇÕ´Ï´Ù. ±×¸®°í, Çؽ¬´Â ±× ¸í½ÃµÈ Å×À̺íÀ» Á¢±ÙÇϱâ À§ÇØ ¿îÀ²À» »ìÇÌ´Ï´Ù.
/*+ HASH_AJ(table) */  
           transforms a NOT IN subquery into a hash antijoin to access
           the specified table
           º¯È¯, ±× ¸í½ÃµÈ Å×À̺íÀ» Á¢±ÙÇÏ´Â Çؽ¬ antijoinÀ¸·ÎÀÇ NOT IN ºÎ¼Ó Á¶È¸
/*+ HASH_SJ (table) */  
           transforms a NOT IN subquery into a hash anti-join to access
           the specified table
           º¯È¯, ±× ¸í½ÃµÈ Å×À̺íÀ» Á¢±ÙÇÏ´Â Çؽ¬ anti-joinÀ¸·ÎÀÇ NOT IN ºÎ¼Ó Á¶È¸
/*+ INDEX(table index) */  
           explicitly chooses an index scan for the specified table
           ±× ¸í½ÃµÈ Å×À̺íÀ» À§ÇÏ¿©, »öÀÎ scanÀ» °í¸£´Â
/*+ INDEX_ASC(table index) */  
           explicitly chooses an ascending-range index scan for the specified
           table
           ±× ¸í½ÃµÈ Å×À̺íÀ» À§ÇÏ¿©, ascending-range »öÀÎ scanÀ» °í¸£´Â
/*+ INDEX_COMBINE(table index) */  
           If no indexes are given as arguments for the INDEX_COMBINE
           hint, the optimizer uses whatever Boolean combination
           of bitmap indexes has the best cost estimate. If particular
           indexes are given as arguments, the optimizer tries to use
           some Boolean combination of those particular bitmap indexes.
           ¾î¶² »öÀεµ INDEX_COMBINE ¾Ï½Ã¸¦ À§ÇØ Àμö·Î¼­ ÁÖ¾îÁöÁö ¾Ê´Â´Ù¸é,  
           bitmap »öÀÎÀÇ °áÇÕÀÌ ¾î¶² ºÎ¿ïÀǸ¦ °¡Àå ÁÁÀº ¼öÇà ³­À̵µ Æò°¡¸¦ °¡Áö°í  
           ÀÖµçÁö ÃÖÀûÀÚ´Â ÀÌ¿ëÇÕ´Ï´Ù.
           Æ¯º°ÇÑ »öÀÎÀÌ Àμö·Î¼­ ÁÖ¾îÁø´Ù¸é, ÃÖÀûÀÚ´Â ±× Ưº°ÇÑ bitmap »öÀÎÀÇ  
           ¸î¸îÀÇ ºÎ¿ïÀÇ °áÇÕÀ» »ç¿ëÇÏ·Á°í ³ë·ÂÇÕ´Ï´Ù.
/*+ INDEX_DESC(table index) */ 
           explicitly chooses a descending-range index scan for the specified
           table
           ±× ¸í½ÃµÈ Å×À̺íÀ» À§ÇÏ¿©, descending-range »öÀÎ scanÀ» °í¸£´Â
/*+ INDEX_FFS(table index) */  
           causes a fast full index scan to be performed rather than a full
           table scan
           ºü¸¥ Àüü »öÀÎ scanÀÌ Àüü Å×À̺í scanÀ̶ó±âº¸´Ù´Â ¼öÇàµÇ°Ô ÇÕ´Ï´Ù.
/*+ MERGE_AJ (table) */  
           transforms a NOT IN subquery into a merge anti-join to access
           the specified table
           º¯È¯, NOT IN ºÎ¼Ó Á¶È¸, ±× ¸í½ÃµÈ Å×À̺íÀ» Á¢±ÙÇϱâ À§ÇØ anti-joinÀ»  
           ÇÕº´ÇÕ´Ï´Ù.
/*+ MERGE_SJ (table) */  
           transforms a correlated EXISTS subquery into a merge semi-join
           to access the specified table
           º¯È¯, °ü·ÃµÈ EXISTS ºÎ¼Ó Á¶È¸, Á¢±ÙÀ¸·Î semi-joinÀ» ÇÕº´ÇÕ´Ï´Ù,  
           ±× ¸í½ÃµÈ Å×À̺í
/*+ ROWID(table) */  
           explicitly chooses a table scan by ROWID for the specified
           table
           ±× ¸í½ÃµÈ Å×À̺íÀ» À§ÇÏ¿©, ROWID¿¡ ÀÇÇØ Å×À̺í scanÀ» °í¸£´Â
/*+ USE_CONCAT */  
           forces combined OR conditions in the WHERE clause of a
           query to be transformed into a compound query using the
           UNION ALL set operator
           ÈûÀº ÁúÀÇÀÇ WHERE ¹®Àý¿¡ ÀÖ´Â UNION ALL ÁýÇÕ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ÇÕ¼ºÀÇ  
           ÁúÀÇ·Î º¯ÇüµÇ´Â OR Á¶°ÇÀ» ÇÕÃƽÀ´Ï´Ù.



/*+ ORDERED */  
           causes Oracle to join tables in the order in which they appear
           in the FROM clause
           ¿À¶óŬÀÌ ¾î´À °Í¿¡ ¼ø¼­·Î Å×À̺íÀ» °áÇÕ½ÃÅ°°Ô ÇÕ´Ï´Ù.
/*+ STAR */  
           forces the large table to be joined last using a nested-loops join
           on the index
           Å« ÀÖ´Â Å×À̺íÀÌ ÃÖÁ¾ »ç¿ë/ȸÀüÀ²¿¡ nested-loops¸¦ °áÇÕ½ÃŲ ÈûÀº  
           ±× »öÀο¡ °áÇÕÇÕ´Ï´Ù.



/*+ DRIVING_SITE (table) */  
           forces query execution to be done at a different site from that
           selected by Oracle
           ÈûÀº ±×°Í°ú ´Ù¸¥ ¿À¶óŬ¿¡ ÀÇÇØ ¼±ÅÃµÈ »çÀÌÆ®¿¡ µÇ´Â ½ÇÇàÀ» ÁúÀÇÇÕ´Ï´Ù.
/*+ USE_HASH (table) */  
           causes Oracle to join each specified table with another row
           source with a hash join
           ¿À¶óŬÀÌ Å×À̺íÀÌ ´Ù¸¥ Çà ÀÚ¿øÀ¸·Î Çؽ¬ Á¢ÇÕÀ¸·Î ¸í½ÃµÇ¸é¼­ °¢ÀÚ¿Í  
           ÇÕÄ¡°Ô ÇÕ´Ï´Ù.
/*+ USE_MERGE (table) */  
           causes Oracle to join each specified table with another row
           source with a sort-merge join
           ¿À¶óŬÀÌ Å×À̺íÀÌ ´Ù¸¥ Çà ÀÚ¿øÀ¸·Î sort-merge Á¢ÇÕÀ¸·Î ¸í½ÃµÇ¸é¼­ °¢ÀÚ¿Í  
           ÇÕÄ¡°Ô ÇÕ´Ï´Ù.

/*+ USE_NL (table) */  
           causes Oracle to join each specified table to another row
           source with a nested-loops join using the specified table as the
           inner table
           ¿À¶óŬÀÌ ±× ¸í½ÃµÈ Å×À̺íÀ» ±× ¾ÈÀÇ Å×À̺í·Î »ç¿ëÇÏ´Â nested-loops Á¢ÇÕ°ú  
           °¢ÀÚ¿Í ´Ù¸¥ Çà ÀÚ¿ø¿¡ ´ëÇÑ ¸í½ÃµÈ Å×À̺íÀ» ÇÕÄ¡°Ô ÇÕ´Ï´Ù.



/*+ APPEND */ , /*+ NOAPPEND */
           specifies that data is simply appended (or not) to a table; existing
           free space is not used. Use these hints only following the
           INSERT keyword.
           µ¥ÀÌŸ°¡ Å×À̺í·Î ´Ü¼øÈ÷ µ¡ºÙ¿©Áø´Ù´Â  (or not)°Í ¸í½ÃÇÕ´Ï´Ù; ¹«·áÀÎ  
           ÇöÁ¸ÇÏ´Â ¿µ¿ªÀº »ç¿ëµÇÁö ¾Ê½À´Ï´Ù.
           ´ÜÁö ±× »ðÀÔ Å° Çٽɾ µû¸£´Â ÀÌ ¾Ï½Ã¸¦ »ç¿ëÇϽÿÀ.
/*+ NOPARALLEL(table) */  
           disables parallel scanning of a table, even if the table was created
           with a PARALLEL clause
           ±× Å×À̺íÀÌ PARALLEL ¹®Àý·Î »õ·Î ¸¸µé¾îÁ³´Ù¸é Å×À̺íÀÇ ÆòÇàÀÇ ¼øÂ÷ °Ë»öÀ»  
           ¹«´ÉÇÏ°Ô ¸¸µì´Ï´Ù.
/*+ PARALLEL(table, instances) */  
           allows you to specify the desired number of concurrent slave
           processes that can be used for the operation.
           DELETE, INSERT, and UPDATE operations are considered for
           parallelization only if the session is in a PARALLEL DML
           enabled mode. (Use ALTER SESSION PARALLEL DML to
           enter this mode.)
           ´ç½ÅÀÌ ±× ¿¬»êÀ» À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Â µ¿½ÃÀÇ ½½·¹À̺ê(slave) ÇÁ·Î¼¼½ºÀÇ  
           ¿ä±¸µÈ ¼ö¸¦ ¸í½ÃÇÏ´Â °ÍÀ» Çã¶ôÇÕ´Ï´Ù.
           ±× ¼¼¼ÇÀÌ °¡´ÉÇÏ°Ô µÈ PARALLEL DML¿¡ ¸ðµå¸¦ ÀÖ´Ù¸é, DELETE, INSERT, UPDATE  
           ¿¬»êÀº ´ÜÁö parallelization¿¡ ´ëÇØ °í·ÁµË´Ï´Ù. (»ç¿ëÀº ÀÌ ¸ðµå¿¡ µé¾î°¡±â  
           À§ÇØ ÆòÇàÀÇ ¼¼¼Ç DMLÀ» º¯°æÇÕ´Ï´Ù.)
/*+ PARALLEL_INDEX  
           allows you to parallelize fast full index scan for partitioned
           and nonpartitioned indexes that have the PARALLEL attribute
           parallelize¿¡ ´ç½Å¿¡°Ô ºü¸¥ °¡µæÇÑ »öÀÎ scanÀ» Çã¶ôÇÕ´Ï´Ù. ±×·±µ¥,  
           ±×°ÍÀº PARALLEL ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Â »öÀÎÀ» ºÐÇÒÇß°í nonpartitionedÇß½À´Ï´Ù.
/*+ NOPARALLEL_INDEX */  
           overrides a PARALLEL attribute setting on an index
           º´·ÄÀÌ »öÀÎÀ» ³ª¾Æ°¡´Â °ÍÀ» ¼ÓÇÏ°Ô ÇÏ´Â ´ëü


/*+ CACHE */  
           specifies that the blocks retrieved for the table in the hint are
           placed at the most recently used end of the LRU list in the
           buffer cache when a full table scan is performed
           ±× ºí·ÏÀÌ Ã£¾Æ¼­ °¡Á®¿Ô´Ù´Â °ÍÀ» ¸í½ÃÇÕ´Ï´Ù. ±×¸®°í ±× Å×À̺íÀ» À§ÇØ  
           ±× ¾Ï½Ã¿¡ ³õ¿©Áý´Ï´Ù. ±×·±µ¥, ±×°ÍÀº °¡Àå ¿äÁîÀ½ »ç¿ëµÈ ¾ðÁ¦ ±× ¹öÆÛ Ä³½¬,  
           °¡µæÇÑ Å×À̺í scan¿¡ ÀÖ´Â LRU ¸®½ºÆ®ÀÇ ³¡ÀÔ´Ï´Ù. ¼öÇàµË´Ï´Ù.
/*+ NOCACHE */  
           specifies that the blocks retrieved for this table are placed at
           the least recently used end of the LRU list in the buffer cache
           when a full table scan is performed
           ±× ¸í½ÃÇÕ´Ï´Ù. ±×¸®°í, ±× ºí·ÏÀº ÀÌ Å×À̺íÀ» À§ÇØ °Ë»öµÇ¸é¼­ ¿äÁîÀ½ »ç¿ëµÈ  
           ¾ðÁ¦ ±× ¹öÆÛ Ä³½¬, °¡µæÇÑ Å×À̺í scan¿¡ ÀÖ´Â LRU ¸®½ºÆ®ÀÇ °¡Àå ÀÛÀº ³¡¿¡  
           ³õ¿©Áý´Ï´Ù. ¼öÇàµË´Ï´Ù.
/*+ MERGE (table) */  
           causes Oracle to evaluate complex views or subqueries before
           the surrounding query
           ¿À¶óŬÀÌ ±× µÑ·¯½Î´Â ÁúÀÇ Àü¿¡ º¹ÀâÇÑ ºä³ª ºÎ¼Ó Á¶È¸¸¦ Æò°¡ÇÏ°Ô ÇÕ´Ï´Ù.
/*+ NO_MERGE (table) */  
           causes Oracle not to merge mergeable views
           ¿À¶óŬÀÌ mergeable ºä¸¦ ÇÕº´ÇÏÁö ¾Ê°Ô ÇÏÁö ¾Ê½À´Ï´Ù
/*+ PUSH_JOIN_PRED (table) */  
           causes the optimizer to evaluate, on a cost basis, whether or
           not to push individual join predicates into the view
           °³°³ Á¢ÇÕÀ» ¹Ì´Â °ÍÀÌ ±× ºä ¾ÈÀ¸·Î ´ÜÁ¤ ÇÏµç °£¿¡ ºñ¿ë ¹æ½ÄÀ¸·Î ÃÖÀûÀÚ°¡  
           Æò°¡ÇÏ°Ô ÇÕ´Ï´Ù.
/*+ NO_PUSH_JOIN_PRED (table) */  
           Prevents pushing of a join predicate into the view
           Á¢ÇÕ ¼úºÎ Áß¿¡¼­ ±× ºä·Î ¹Ð¸é¼­, ¸·´Â
/*+ PUSH_SUBQ */  
           causes nonmerged subqueries to be evaluated at the earliest
           possible place in the execution plan
           ¿øÀÎÀº ±× ½ÇÇà °èȹ¿¡¼­ÀÇ °¡Àå À̸¥ °¡´ÉÇÑ Àå¼Ò¿¡ Æò°¡µÇ´Â ºÎ¼Ó Á¶È¸¸¦  
           nonmergedÇß½À´Ï´Ù.
/*+ STAR_TRANSFORMATION */  
           makes the optimizer use the best plan in which the transformation
           has been used.
           ÃÖÀûÀÚ°¡ ±× º¯ÇüÀÌ »ç¿ëµÈ °¡Àå ÁÁÀº °èȹÀ» »ç¿ëÇÏ´Â Á¦ÀÛ


ÁÖÁ¦ : ¿©°¡/»ýÈ°/IT > ÄÄÇ»ÅÍ/ÀÎÅͳÝ

¡ãtop