Oracle varchar Çü date ºñ±³ À妽º Áú¹®

   Á¶È¸ 3070   Ãßõ 0    

 

Oracle varchar 형 date 비교 인덱스 질문 입니다.


가령

TABLE1.DATE1 (varchar, 8)

TABLE2.START_DATE (varchar, 8)

TABLE2.END_DATE (varchar, 8)

과 같이 컬럼이 정의되어 있을때 데이터는 모두 "20180101" 과 같이 들어가 있습니다.


WHERE TABLE1.DATE1 >= TABLE2.START_DATE

            AND TABLE1.DATE1 <= TABLE2.END_DATE


이부분의 인덱스를 만드려고 한다면

DATE1 의 인덱스를 생성하고...


START_DATE, END_DATE 같이 만들어야 하나요 아니면

START_DATE 따로, END_DATE 따로 인덱스를 만들어야 하나요?


문자형 >= AND <= 비교일때는 어떤 경우에 타는지 긍금합니다.

 

ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
Áú¹®ÀÌ ÀÌÇØ°¡ °¡Áö ¾Ê½À´Ï´Ù.
3°³´Ù Ä÷³ÀÌ ¾Æ´Ò °Í °°Àºµ¥..
3°³´Ù Ä÷³À̸é À妽º ¸¸µé Àǹ̰¡ ¾ø½À´Ï´Ù.

ÇöÀç ¶Ç´Â Æ¯Á¤ÀÏÀÚ¿Í start_date, end_date ºñ±³¸¦ Çϸé
ÀϹÝÀûÀ¸·Î À̷µ¥ÀÌÅÍ°¡ ½×ÀÌ´Â Å×À̺í·Î
¹Ì·¡ µ¥ÀÌÅÍ°¡ Àû°í, ¹üÀ§ °Ë»ö ÈļøÀ§¿¡ ¿À´Â index Ä÷³Àº »ç¿ëµÇÁö ¾Ê±â ¶§¹®¿¡
end_date  Ä÷³¸¸À¸·Î À妽º¸¦ ±¸¼ºÇÕ´Ï´Ù.
¹Î»çÀå 2019-08
Áú¹®À» Á» ´õ ±¸Ã¼ÀûÀ¸·Î ¼öÁ¤ÇØ º¸¾Ò½À´Ï´Ù. ºÎŹµå¸³´Ï´Ù!!
±âº»ÀûÀ¸·Î Äõ¸®¿¡¼­ >= Àº... > OR = ÀÔ´Ï´Ù. µû¶ó¼­ ÀÌ·¯ÇÑ Äõ¸®´Â ´ëºÎºÐÀÇ °æ¿ì À妽º ÀÚü¸¦ ŸÁö ¾Ê½À´Ï´Ù. À妽º¸¦ Å¿ì·Á¸é NOT < ·Î ÇؾßÇÕ´Ï´Ù.
Àü DBA ´Â ¾Æ´Ï¶ó¼­...À妽º ¼³Á¤ °ü·ÃÇؼ­´Â ´ÙÀ½ºÐ²²............
ÇØ´ç WhereÀýµµ ±¸Ã¼ÀûÀÌÁö ¾Ê½À´Ï´Ù.

1¹ø Å×ÀÌºí¿¡ Index¸¦ »ý¼ºÇϱâ À§Çؼ­´Â
TABLE1.DATE1 >= '20190823' ó·³
row°¡ Á¦ÇѵǴ Á¶°ÇÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
¶Ç´Â
2¹øÅ×ÀÌºí ¼±ÇàÅ×À̺íÀÌ µÇ´Â NL Á¶Àο¡¼­ index¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.

À§ ¿¹½ÃµÈ Á¶°ÇÀý¸¸ ÀÖ´Ù°í °¡Á¤ÇßÀ»¶§
Index¾øÀÌ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀ¸·Î ÃßÃø µË´Ï´Ù.
(ÀϹÝÀûÀ¸·Î ´Ù¸¥Á¶°Ç¾øÀÌ À§¿Í°°Àº Á¶°ÇÀý·Î »ç¿ëÇÒ ¾÷¹«´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. JoinÀº ºÎ¸ðÀڽİü°è°¡ ÀÖ¾î¾ß ¹ß»ýÇÕ´Ï´Ù.)
     
¹Î»çÀå 2019-08
°¡·É TABLE1.DATE1 Àº ½ÃÇè ÀÀ½ÃÀÏ, TABLE2.START_DATE, END_DATE ´Â ½ÃÇè ÀÀ½Ã±â°£ À̶ó°í º¸¸é µÇ°Åµç¿ä.
ÀÀ½Ã±â°£¿¡ ¸Â°Ô ½ÅûÇÑ °ÍÀÎÁö WHERE ·Î üũÇÏ·Á ÇÑ´Ù°í ±×³É ¿¹½Ã·Î¼­ »ý°¢ÇØ º¸¸é µÉ°Í °°½À´Ï´Ù.
ÀÌ °æ¿ì¿¡µµ ´äº¯ÁֽŠ¼³¸íÀÌ ¸Â´Â°ÍÀΰ¡¿ä?
          
ÇØ´ç ¿¹ÀÏ °æ¿ì
Table1¿¡´Â ½ÃÇè°ú¸ñ, ÀÀ½ÃÀÚ, ÀÀ½ÃÀÏÀÚ
table2¿¡´Â ½ÃÇè°ú¸ñ, ÀÀ½Ã±â°£
ÀÌ·¸°Ô ±¸¼ºµÇ¾î¾ß ¸Â±â ¶§¹®¿¡ Á¶°ÇÀý¿¡ 1.½ÃÇè°ú¸ñ=2.½ÃÇè°ú¸ñ
ó·³ Á¶°ÇÀÌ Ãß°¡ µÇ¾î¾ß ÇÕ´Ï´Ù.

Àüü µ¥ÀÌÅ͸¦ ÀÀ½Ã±â°£¿¡ ¸Â°Ô ½ÅûÇÑ °ÍÀÎÁö üũÇÑ´Ù¸é
Àüü µ¥ÀÌÅ͸¦ üũÇÏ´Â °Å¶ó¼­ index¸¦ Å¿ï ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.
index¸¦ ¸¸µé¾îµµ ŸÁö ¾Ê°í ½ÇÇà µÉ °ÍÀÔ´Ï´Ù.

½ÃÇè°ú¸ñÀÌ ¾ÆÁÖ ¸¹ÀÌ °ü¸® µÈ´Ù¸é( 2¹ø Å×À̺íÀÌ ¼±ÇàÅ×À̺íÀÌ µÇ¾î NLÁ¶ÀÎÀ¸·Î ½ÇÇàÇÒ °æ¿ì)
table1¿¡ ½ÃÇè°ú¸ñ,ÀÀ½ÃÀÏÀÚ·Î º¹ÇÕ À妽º ±¸¼ºÀ» °í·ÁÇØ º¼ ¼ö Àְڳ׿ä.
±×·±µ¥ ÀÀ½Ã±â°£¾È¿¡ ÀÀ½ÃÇÏÁö ¾ÊÀº µ¥ÀÌÅÍ°¡ Á¸ÀçÇÒ °¡´É¼ºÀº ¸Å¿ì ³·±â ¶§¹®¿¡
º¹ÇÕÀ妽ºÀÇ È¿¿ëÀº ¾ø½À´Ï´Ù.
table1¿¡ ½ÃÇè°ú¸ñ index¿Í ÀÀ½ÃÀÚ index °¢°¢ ±¸¼ºÇÏ´Â °æ¿ì¸¸ ÀÖÀ» °ÍÀ¸·Î º¸ÀÔ´Ï´Ù.
               
¹Î»çÀå 2019-08
»ç½Ç ½ÃÇèÀº ¾Æ´Ï°í¿ä, ±×³É ÀÌÇØÇϱ⠽±°Ô ºñÀ¯Çؼ­ ¸»¾¸µå¸°°ÍÀÔ´Ï´Ù.
varchar ³¯Â¥ ºñ±³¸¦ ÇÑ´Ù°í º¸¸é µÇ°í¿ä.

(1) ½ÃÀÛÀÏ, Á¾·áÀÏÀ» ÇϳªÀÇ À妽º·Î Àâ´Â°Ô ³ªÀºÁö
(2) µû·Î ½ÃÀÛÀÏ°ú Á¾·áÀÏ °¢°¢ À妽º¸¦ ¸¸µå´Â°Ô ³ªÀº°ÍÀÎÁö ÀÌ°Ô Á¦°¡ ±Ã±ÝÇÑ ºÎºÐÀÔ´Ï´Ù.
                    
¾÷¹« ¸ðµ¨¿¡ µû¶ó ´Ù¸§.
* ±×·¡¼­ INDEX ¼³°è°¡ ¾î·Æ½À´Ï´Ù.
À§ ¿¹¿¡¼­´Â INDEX¸¦ ÀâÀ» ÇÊ¿ä°¡ ÀüÇô ¾ø´Â °æ¿ì.

½ÃÀÛÀÏ, Á¾·áÀÏÀÌ Æ÷ÇÔµÈ Å×À̺íÀÌ ÀÚ½Ä Å×À̺í(ÁÖ·Î ÀÌ·Â °ü¸® Å×À̺í)ÀÏ °æ¿ì
ºÎ¸ðÅ×À̺íÀÌ TABLE1.DATE1 Àº INDEX¸¦ ¸¸µé ÇÊ¿ä°¡ ¾øÀ¸¸ç( °Ë»öÁ¶°ÇÀÌ ÀÖÀ» °æ¿ì´Â »ý¼º°í·Á)
TABLE2´Â ÀϹÝÀûÀ¸·Î Á¾·áÀϸ¸ À妽º¿¡ Æ÷ÇԵ˴ϴÙ.
(µ¥ÀÌÅÍ°¡ °è¼Ó ½×À̱⠶§¹®¿¡ ½ÃÀÛÀÏÀº °Ë»öÁ¶°Ç¿¡ Ç×»ó ¸¸Á·ÇÏ´Â °æ¿ì°¡ ¸¹¾Æ INDEX ±¸½ÇÀ» ¸øÇÕ´Ï´Ù.)
          
table1¿¡ ½ÃÇè°ú¸ñ, ÀÀ½ÃÀÏÀÚ·Î º¹ÇÕÀ妽º¸¦ ±¸¼ºÇØ
À妽º¸¦ Ÿ°Ô Äõ¸®ÇÏ´Â ¹æ¹ýµµ ÀÖ½À´Ï´Ù.
SELECT *
FROM T1, T2
WHERE T1.°ú¸ñ = T2.°ú¸ñ
AND T1.ÀÀ½ÃÀÏ < T2.½ÃÀÛÀÏ
UNION ALL
SELECT *
FROM T1, T2
WHERE T1.°ú¸ñ = T2.°ú¸ñ
AND T1.ÀÀ½ÃÀÏ > T2.Á¾·áÀÏ

À§¿Í °°ÀÌ ÀÀ½ÃÀÏÀÌ ÀÀ½Ã±â°£¿¡ ¹þ¾î³­ µ¥ÀÌÅÍ( Áï °¡´É¼ºÀÌ ³·Àº µ¥ÀÌÅÍ)
¸¸ »ÌÀ» °æ¿ì´Â ±¸¼ºÇÑ INDEX¸¦ Å» °¡´É¼ºÀÌ ³ô½À´Ï´Ù.

±×·±µ¥ ÀÌ·± ¾÷¹«´Â 1ȸ¼º ¶Ç´Â ¼öÇà Ƚ¼ö°¡ ¸¹Áö ¾ÊÀº °æ¿ì¶ó INDEX¸¦ ±¸¼ºÇÏ´Â °ÍÀ» ±ÇÀåÇÏÁö ¾Ê½À´Ï´Ù.


QnA
Á¦¸ñPage 1227/5693
2014-05   5021088   Á¤ÀºÁØ1
2015-12   1556424   ¹é¸Þ°¡
2014-08   4531   ¾Ç¶¥
2019-03   3374   ±èµ¿Çõ1
2020-05   1987   ±è¿µ±â
2015-12   4630   ǪÇÏÈ÷
2018-01   3964   ½Å¿ì¼·
2021-10   1994   ¾ÖƼƩµå
2016-11   3949   rÀ̽¿ør
2009-11   10445   Èû³»ÀÚ
2018-01   9250   song05
2009-12   9555   ±è°Ç¿ì
2018-01   3977   ±è°Ç¿ì
2023-05   2051   popokj
2014-08   3856   Çà¾Æ¹ü
2014-08   3488   À嵿°Ç2014
2015-12   4164   ±¼´Ù¸®±³
2019-03   2703   µå¶óÄÚ´Ð
2019-03   2860   ¹Ú¸í±ÙTN
2023-06   2990   ÃÊÂ¥Äĵ¹ÀÌ
2010-01   6629   Àü±ÙÇö
2010-01   7853   ³ª³Ê¿ì¸®