|
¾È³çÇϼ¼¿ä. °Á¤½ÄÀÔ´Ï´Ù.
Áö³ÁÖ¿¡ Á¦°¡ ±ÛÀ» ¿Ã¸° ’View¸¦ ¸¸µé¶§´Â »óµµ´ö(?)ÀÌ ÇÊ¿äÇÏ´Ù?’¿¡ ´ëÇÑ ÁÖÁ¦·Î ±ÛÀ» ½áº¸°Ú½À´Ï´Ù.
ÀϹÝÀûÀ¸·Î ºä¸¦ »ç¿ëÇÏ´Â ¸ñÀûÀº º¸¾È Ãø¸é, ÆíÀÇ Ãø¸é, °ü¸® Ãø¸é¿¡¼ È¿À²ÀûÀ̱⠶§¹®ÀÔ´Ï´Ù.
ù¹ø쨰ÀÎ º¸¾È Ãø¸éÀº SQL¿¡¼ ¾î¶² ÁýÇÕÀ» ¸¸µç View¸¦ »ç¿ëÇϱâ 떄¹®¿¡ ±× View ¾ÈÀÇ ³»¿ëÀÌ °ø°³µÇÁö
¾ÊÀ¸¹Ç·Î º¸¾ÈÀ» À¯ÁöÇÒ ¼ö ÀÖ½À´Ï´Ù.
µÎ¹øÂ°ÀÎ ÆíÀÇ Ãø¸éÀº ¿©·¯ ¾÷¹« ¿µ¿ª¿¡¼ ´Ù¾çÇÑ µ¥ÀÌÅ͸¦ »Ì¾Æ Á¤º¸¸¦ º¸¿©ÁÙ °æ¿ì °¢°¢ÀÇ ¾÷¹«¿µ¿ª¿¡
´ëÇØ ÀÚ¼¼È÷ ¾Ë¾Æ¾ß Çϳª, ½ÇÁúÀûÀ¸·Î ´Ù¾çÇÑ ¾÷¹«¸¦ ¸ðµÎ ¾Ë±â¶õ ½±Áö°¡ ¾Ê½À´Ï´Ù. ÇÏÁö¸¸ °¢°¢ÀÇ
¾÷¹«¿¡ ´ëÇØ View·Î Á¦°øÇÒ °æ¿ì, ÀÌ View¸¦ ÀÌ¿ëÇÏ¿© ´Ù¾çÇÑ ¾÷¹«¿µ¿ªÀ» ÀÌ¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡
ÆíÀǼºÀÌ Áõ°¡ÇÏ°Ô µË´Ï´Ù.
¸¶Áö¸·À¸·Î ¼¼¹øÂ°ÀÎ °ü¸® Ãø¸éÀº µÎ¹øÂ° »ìÆìº» °Í ó·³ ´Ù¾çÇÑ ¾÷¹«µéÀ» View·Î °ü¸®ÇÒ °æ¿ì
À¯Áöº¸¼ö ¹× ÀçȰ¿ëÀ» ÇÒ ¼ö Àֱ⠶§¹®¿¡ °ü¸®Çϴµ¥ »ó´çÈ÷ À¯¿ëÇÕ´Ï´Ù.
ÀÌ·± À¯¿ëÇÑ ÀåÁ¡À» °¡Áö°í ÀÖ´Â ViewÀε¥µµ ºÒ±¸Çϰí À̸¦ Àß ¸ø »ç¿ëÇÒ °æ¿ì ¼º´ÉÃø¸é¿¡¼
¾ÆÁÖ ¾ÈÁÁÀº °á°ú¸¦ µµÃâÇÏ°Ô µÇ¾î ½ÉÇÒ °æ¿ì ¼¹öÀÇ CPU »ç¿ë·üÀ» 100%·Î ³ôÈú ¼öµµ ÀÖ½À´Ï´Ù.
½ÇÁ¦ Á¦°¡ Áö¿øÇϰí ÀÖ´Â »çÀÌÆ®¿¡¼µµ Æ©´×ÀÌ ÇÊ¿äÇÑ ÇÁ·Î±×·¥ÀÇ 3~40% Á¤µµ´Â ÀÌ·± View¸¦ À߸ø
»ý¼º ¹× °ü¸®ÇÏ¿© ¿ÀÇ ÀÌÈÄ ¿î¿µ¿¡¼ ¼º´ÉÀúÇÏÀÇ ¿øÀÎÀÌ µÇ°í ÀÖ½À´Ï´Ù.
±×·¯¹Ç·Î View¸¦ »ý¼º ¹× °ü¸®½Ã ÀÌ·± ÁÖÀÇ »çÇ×µéÀ» ÃæºÐÈ÷ ¼÷ÁöÇÏ¿© ÇâÈÄ À¯Áöº¸¼ö¿¡ Å« ºñ¿ëÀ»
ÁöºÒÇÏÁö ¾Êµµ·Ï ³ë·ÂÇÏ´Â °ÍÀÌ Áß¿äÇÒ °ÍÀ¸·Î »ý°¢ÇÕ´Ï´Ù.
Áö±ÀºÎÅÍ Á¦°¡ »çÀÌÆ®¿¡¼ Á÷Á¢ °æÇèÇÑ ³»¿ëµéÀ» ¹ÙÅÁÀ¸·Î View¸¦ ¸¸µé 떄 ¿Ö »óµµ´öÀÌ ÇÊ¿äÇÑÁö »ìÆìº¸µµ·Ï
ÇϰڽÀ´Ï´Ù.
¸ñÂ÷´Â ¾Æ·¡¿Í °°ÀÌ ÁøÇàÇϰڽÀ´Ï´Ù.
I. ’View Merging’ À̶õ?
II. Àü¿ë ºä vs °ø¿ë ºä
III. view ¾È¿¡ °¡°øµÈ Ä÷³
IV. Alias¸¦ Àü·«ÀûÀ¸·Î »ç¿ëÇØ¾ß...
V. ’View Merging’À» ¹æÇØÇÏ´Â ³ª¸ÓÁö ¿ä¼Òµé
I. ’View Merging’ À̶õ?
1. Cost Based Query Transformation(CBQT)
1) CBQT¶õ ¿ÉƼ¸¶ÀÌÀú°¡ ÁÖ¾îÁø SQLÀ» °¡Áö°í ½ÇÇà°èȹÀ» ¸¸µé 떄 ±âÁ¸ SQLÀ» º¸´Ù ÃÖÀûÈÇϱâ À§ÇØ
SQLÀ» Àç°¡°øÇÏ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ÀÌ·± ´ëÇ¥ÀûÀÎ °ÍµéÀÌ 10g¿¡ ¿Í¼ °È°¡ µÇ¾ú´Âµ¥,
’View Merging, Subquery Unnesting, Push Predicate’ µîÀÌ ÀÖ½À´Ï´Ù.
ÀÌÁß ¿ì¸®°¡ »ìÆìº¼ ³»¿ëÀÌ ¹Ù·Î ’View Merging’ Àä. ¾Æ·¡¿¡¼ ±× ³»¿ëÀ» »ìÆìº¸°Ú½À´Ï´Ù.
2) View Merging Sample
¨ç EMP Å×ÀÌºí¿¡¼ DEPTº° SAL ÇÕ°è ±¸ÇÏ´Â View
CREATE OR REPLACE VIEW EMP_DEPT_SUM_V AS
SELECT DEPTNO,
SUM(SAL) SUM_SAL
FROM EMP
GROUP BY DEPTNO;
¨è View¸¦ ÀÌ¿ëÇÑ SQL
SELECT D.DNAME,
D.LOC,
EDSV.SUM_SAL
FROM DEPT D,
EMP_DEPT_SUM_V EDSV
WHERE D.DEPTNO = EDSV.DEPTNO
AND D.DNAME = ’SALES’
;
¨é ¿ÉƼ¸¶ÀÌÀú°¡ CBQTÀÇ View MergingÀ» ÅëÇØ À籸¼ºÇÑ SQL
SELECT D.DNAME,
D.LOC,
EDSV.SUM_SAL
FROM (SELECT DEPTNO,
SUM(SAL) SUM_SAL
FROM EMP
GROUP BY DEPTNO) D,
EMP_DEPT_SUM_V EDSV
WHERE D.DEPTNO = EDSV.DEPTNO
AND D.DNAME = ’SALES’
;
¨ê View Merging ½ÇÇà°èȹ
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 54 | 7 (15)| 00:00:01 |
| 1 | HASH GROUP BY | | 2 | 54 | 7 (15)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| EMP | 5 | 35 | 1 (0)| 00:00:01 |
| 3 | NESTED LOOPS | | 5 | 135 | 6 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | DEPT | 1 | 20 | 5 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | EMP_N1 | 5 | | 0 (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("D"."DNAME"=’SALES’)
5 - access("D"."DEPTNO"="DEPTNO")
º¸½Ã´Â °Íó·³ EMP_DEPT_SUM_V ºä ¾È¿¡ GROUP BY°¡ Àִµ¥ ÀÌ GROUP BY¸¦ µû·Î ½ÇÇàÇѰÍÀÌ ¾Æ´Ï¶ó
DEPT Å×ÀÌºí¿¡¼ DNAME = ’SALES’¿¡ ´ëÇÑ ÇÑ ·Î¿ì¸¦ °¡Áö°í EMP_DEPT_SUM_V ºä ¾ÈÀ¸·Î µé¾î°¡
ÇØ´çµÇ´Â DEPTNO¿¡ ´ëÇØ¼ SALÀ» SUM()ÇÑ °á°úÀÔ´Ï´Ù.
ÀÌó·³ ¿ÉƼ¸¶ÀÌÀú´Â »ç¿ëÀÚ°¡ View¸¦ »ç¿ëÇÏ´Â SQLÀ» ´øÁú ¶§ À̸¦ Àç°¡°øÇÏ¿© ÃÖÀûÈµÈ SQLÀ»
´Ù½Ã ¸¸µé°í ÀÖ½À´Ï´Ù.
±×·³ View MergingÀÌ ¾ÈµÈ´Ù¸é ¾î¶»°Ô µÉ±î¿ä? ¾Æ·¡¿¡¼ »ìÆìº¸°Ú½À´Ï´Ù.
¨ë No Merging ½ÇÇà°èȹ
SELECT /*+ NO_MERGE(EDSV) */ -- EDSV ºä¸¦ MergingÇÏÁö ¾Êµµ·Ï ÇÏ´Â ÈùÆ®
D.DNAME,
D.LOC,
EDSV.SUM_SAL
FROM DEPT D,
EMP_DEPT_SUM_V EDSV
WHERE D.DEPTNO = EDSV.DEPTNO
AND D.DNAME = ’SALES’;
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 46 | 12 (17)| 00:00:01 |
|* 1 | HASH JOIN | | 1 | 46 | 12 (17)| 00:00:01 |
|* 2 | TABLE ACCESS FULL | DEPT | 1 | 20 | 5 (0)| 00:00:01 |
| 3 | VIEW | EMP_DEPT_SUM_V | 3 | 78 | 6 (17)| 00:00:01 |
| 4 | HASH GROUP BY | | 3 | 21 | 6 (17)| 00:00:01 |
| 5 | TABLE ACCESS FULL| EMP | 14 | 98 | 5 (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("D"."DEPTNO"="EDSV"."DEPTNO")
2 - filter("D"."DNAME"=’SALES’)
º¸½Ã´Â °Íó·³ DEPT¿Í EMP_DEPT_SUM_V ºä°¡ Á¶À뵃 떄 ’NESTED LOOP’·Î Á¶ÀÎµÈ °ÍÀÌ ¾Æ´Ï¶ó
’HASH JOIN’À¸·Î µÇ¾ú°í ÀÌ ºÎºÐ¿¡¼ access("D"."DEPTNO"="EDSV"."DEPTNO") ó·³ Á¶ÀÎÀÌ
µÈ°ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
±×¸®°í ºä ¾ÈÀ¸·Î DEPT °ªÀÌ Ä§Åõ¸¦ ¸øÇ߱⠶§¹®¿¡ GROUP BY°¡ VIEW ¾È¿¡¼ ¸ÕÀú Ç®¸®°í ÀÖ½À´Ï´Ù.
´ëºÎºÐ View MergingÀÌ ¾ÈµÉ¶§´Â ÀÌó·³ ½ÇÇà°èȹ¿¡ VIEW°¡ º¸Àδٰųª HASH JOINÀ¸·Î Ç®¸®°í
ÀÖ½À´Ï´Ù.
2. View MergingÀÌ µÉ °æ¿ì¿Í ¾ÈµÉ °æ¿ìÀÇ ÀÏ·® Â÷ÀÌ
1) View Merging vs No Merging

±×¸²¿¡¼ º¸½Ã´Ù½ÃÇÇ View MergingÀÌ µÉ °æ¿ì DEPT Å×ÀÌºí¿¡¼ DNAME = ’SALES’ ÇѰǿ¡ ´ëÇØ
EMP Å×À̺í°ú ¸ÅĪµÇ´Â 1¸¸ °ÇÀÇ µ¥ÀÌÅ͸¸ SUM() ÀÛ¾÷À» ÇÏ¸é µÇ³ª No MergingÀÌ µÉ °æ¿ì
DEPT Å×ÀÌºí¿¡¼ ÇѰÇÀ» °¡Á®¿Â µÚ EMP Å×ÀÌºí¿¡¼ 11¸¸°ÇÀ» µ¶¸³ÀûÀ¸·Î ¼öÇàÇÏ¿© ¾òÀº
EMP Å×ÀÌºí¿¡¼ 11¸¸°ÇÀ» ¼öÇàÇÏ¿© ¾òÀº °á°ú¸¦ DEPT Å×À̺íÀÇ ÇѰǰú ¸ÅĪµÇ´Â µ¥ÀÌÅ͸¦
ÇÊÅÍ·Î »©³»±â ¶§¹®¿¡ ÀÏ·® Â÷ÀÌ´Â ’1¸¸°Ç vs 11¸¸°Ç’ À̶ó´Â ¾öû³ Â÷À̸¦ º¸ÀÌ°Ô µË´Ï´Ù.
2) View´Â °¡±ÞÀû MergingÀÌ µÇ¾ß ÇÔ
- ÀÌó·³ VIew´Â ±× Â÷üÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÁÙ¿©ÁÖ´Â Á¶°ÇÀÌ ´ëºÎºÐ µé¾î°¡ ÀÖÁö ¾Ê±â ¶§¹®¿¡
ÀÌ View¸¦ »ç¿ëÇÏ´Â SQL¿¡¼ ±× View¸¦ ÁÙ¿©ÁÖ´Â Á¶°ÇÀ» Á¶ÀÎÀ¸·Î ¿¬°á½ÃŰ¹Ç·Î °¡±ÞÀû
Á¶ÀÎÀÌ µÉ 떄 View MergingÀÌ µÇ¾î¾ß ¼º´ÉÀ» º¸Àå¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.
3) Àü·«ÀûÀ¸·Î View MergingÀ» ¾È½Ã۱⵵ ÇÔ
- ÇÏÁö¸¸ Ç×»ó View MergingÀÌ ÁÁÀº°Í¸¸Àº ¾Æ´Õ´Ï´Ù. ¶§¿¡ µû¶ó MeringÀ» ¾È½ÃŰ°í ¿¬°á½ÃÄѾß
Á¶ÀÎ ·¹Äڵ尡 Áõ°¡ÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÏ·®À» ÁÙÀÌ´Â ÄÉÀ̽ºµµ ÀÖÁö¸¸, ÀÌ´Â ±ØÈ÷ ¼Ò¼ö¿¡
ºÒ°úÇϹǷΠÀü·«ÀûÀ¸·Î »ç¿ëÇÒ ¶§ À¯¿ëÇÑ ¹æ¹ýÀÔ´Ï´Ù.
4) CBQTÀÇ RBO, CBO
- ¿À¶óŬ DBMS´Â ¹öÀü¾÷ÀÌ µÉ¼ö·Ï ¿ÉƼ¸¶ÀÌÀú ¼öÇàÀ» RBOº¸´Ù CBO·Î º¯È¯À» ½ÃÄ×°í 10g¿¡ ¿Í¼´Â
100% CBO ±â¹ÝÀ¸·Î ¿ÉƼ¸¶ÀÌÀú°¡ ¼öÇàÀÌ µË´Ï´Ù. ±×¸®°í ÀÌ CBQT ¶ÇÇÑ 9i±îÁö´Â Rule Base·Î
µ¿ÀÛÀ» ÇÏ¿´´Âµ¥ 10g¿¡ ¿Í¼ ÀÌ ºÎºÐ±îÁöµµ Cost Base·Î °È°¡ µÇ¾ú½À´Ï´Ù.
- ±×·¯´Ùº¸´Ï 9i±îÁö View¸¦ »ç¿ëÇϰí ÀÖ´Â SQLÀÌ Àß ¼öÇàµÇ¾ú´Ù°¡ 10g·Î ¾÷±×·¹À̵åÇϸé¼
Cost Base·Î º¯°æµÇ´Â °úÁ¤¿¡¼ View MergingÀÌ Àß ¾ÈµÇ¾î ¼öÇà¼Óµµ°¡ ¿À·¡ °É¸®´Â ÇÁ·Î±×·¥ÀÌ
´Ù¼ö ¹ß»ýµÇ°Ô µÇ¾ú½À´Ï´Ù.
- ±×·¯¹Ç·Î 10g¿¡¼´Â ´õ¿í ÀÌ CBQT(View Merging Æ÷ÇÔ)¿¡ ´ëÇØ ½Å°æÀ» ¸¹ÀÌ ½á¾ß ÇÒ °ÍÀ¸·Î
»ý°¢µË´Ï´Ù.
À̹ø¿¡´Â Chapter I ±îÁö¸¸ ±â¼úÀ» Çϰí Â÷ÁÖ¿¡ ´ÙÀ½ ³»¿ëÀ» Á¤¸®Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
ÀÐÀ¸½Ã°í ÀÌ»óÇÑÁ¡À̳ª ±Ã±ÝÇϽг»¿ëÀÌ ÀÖÀ¸½Ã¸é ¸®Çà ´Þ¾ÆÁֽñ⠹ٶø´Ï´Ù.
°¨»çÇÕ´Ï´Ù.
|