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 Ä÷³¸¸À¸·Î À妽º¸¦ ±¸¼ºÇÕ´Ï´Ù.
Àü DBA ´Â ¾Æ´Ï¶ó¼...À妽º ¼³Á¤ °ü·ÃÇؼ´Â ´ÙÀ½ºÐ²²............
1¹ø Å×ÀÌºí¿¡ Index¸¦ »ý¼ºÇϱâ À§Çؼ´Â
TABLE1.DATE1 >= '20190823' ó·³
row°¡ Á¦ÇѵǴ Á¶°ÇÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
¶Ç´Â
2¹øÅ×ÀÌºí ¼±ÇàÅ×À̺íÀÌ µÇ´Â NL Á¶Àο¡¼ index¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.
À§ ¿¹½ÃµÈ Á¶°ÇÀý¸¸ ÀÖ´Ù°í °¡Á¤ÇßÀ»¶§
Index¾øÀÌ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀ¸·Î ÃßÃø µË´Ï´Ù.
(ÀϹÝÀûÀ¸·Î ´Ù¸¥Á¶°Ç¾øÀÌ À§¿Í°°Àº Á¶°ÇÀý·Î »ç¿ëÇÒ ¾÷¹«´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. JoinÀº ºÎ¸ðÀڽİü°è°¡ ÀÖ¾î¾ß ¹ß»ýÇÕ´Ï´Ù.)
ÀÀ½Ã±â°£¿¡ ¸Â°Ô ½ÅûÇÑ °ÍÀÎÁö WHERE ·Î üũÇÏ·Á ÇÑ´Ù°í ±×³É ¿¹½Ã·Î¼ »ý°¢ÇØ º¸¸é µÉ°Í °°½À´Ï´Ù.
ÀÌ °æ¿ì¿¡µµ ´äº¯ÁֽŠ¼³¸íÀÌ ¸Â´Â°ÍÀΰ¡¿ä?
Table1¿¡´Â ½ÃÇè°ú¸ñ, ÀÀ½ÃÀÚ, ÀÀ½ÃÀÏÀÚ
table2¿¡´Â ½ÃÇè°ú¸ñ, ÀÀ½Ã±â°£
ÀÌ·¸°Ô ±¸¼ºµÇ¾î¾ß ¸Â±â ¶§¹®¿¡ Á¶°ÇÀý¿¡ 1.½ÃÇè°ú¸ñ=2.½ÃÇè°ú¸ñ
ó·³ Á¶°ÇÀÌ Ãß°¡ µÇ¾î¾ß ÇÕ´Ï´Ù.
Àüü µ¥ÀÌÅ͸¦ ÀÀ½Ã±â°£¿¡ ¸Â°Ô ½ÅûÇÑ °ÍÀÎÁö üũÇÑ´Ù¸é
Àüü µ¥ÀÌÅ͸¦ üũÇÏ´Â °Å¶ó¼ index¸¦ Å¿ï ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.
index¸¦ ¸¸µé¾îµµ ŸÁö ¾Ê°í ½ÇÇà µÉ °ÍÀÔ´Ï´Ù.
½ÃÇè°ú¸ñÀÌ ¾ÆÁÖ ¸¹ÀÌ °ü¸® µÈ´Ù¸é( 2¹ø Å×À̺íÀÌ ¼±ÇàÅ×À̺íÀÌ µÇ¾î NLÁ¶ÀÎÀ¸·Î ½ÇÇàÇÒ °æ¿ì)
table1¿¡ ½ÃÇè°ú¸ñ,ÀÀ½ÃÀÏÀÚ·Î º¹ÇÕ À妽º ±¸¼ºÀ» °í·ÁÇØ º¼ ¼ö Àְڳ׿ä.
±×·±µ¥ ÀÀ½Ã±â°£¾È¿¡ ÀÀ½ÃÇÏÁö ¾ÊÀº µ¥ÀÌÅÍ°¡ Á¸ÀçÇÒ °¡´É¼ºÀº ¸Å¿ì ³·±â ¶§¹®¿¡
º¹ÇÕÀ妽ºÀÇ È¿¿ëÀº ¾ø½À´Ï´Ù.
table1¿¡ ½ÃÇè°ú¸ñ index¿Í ÀÀ½ÃÀÚ index °¢°¢ ±¸¼ºÇÏ´Â °æ¿ì¸¸ ÀÖÀ» °ÍÀ¸·Î º¸ÀÔ´Ï´Ù.
varchar ³¯Â¥ ºñ±³¸¦ ÇÑ´Ù°í º¸¸é µÇ°í¿ä.
(1) ½ÃÀÛÀÏ, Á¾·áÀÏÀ» ÇϳªÀÇ À妽º·Î Àâ´Â°Ô ³ªÀºÁö
(2) µû·Î ½ÃÀÛÀÏ°ú Á¾·áÀÏ °¢°¢ À妽º¸¦ ¸¸µå´Â°Ô ³ªÀº°ÍÀÎÁö ÀÌ°Ô Á¦°¡ ±Ã±ÝÇÑ ºÎºÐÀÔ´Ï´Ù.
* ±×·¡¼ INDEX ¼³°è°¡ ¾î·Æ½À´Ï´Ù.
À§ ¿¹¿¡¼´Â INDEX¸¦ ÀâÀ» ÇÊ¿ä°¡ ÀüÇô ¾ø´Â °æ¿ì.
½ÃÀÛÀÏ, Á¾·áÀÏÀÌ Æ÷ÇÔµÈ Å×À̺íÀÌ ÀÚ½Ä Å×À̺í(ÁÖ·Î ÀÌ·Â °ü¸® Å×À̺í)ÀÏ °æ¿ì
ºÎ¸ðÅ×À̺íÀÌ TABLE1.DATE1 Àº INDEX¸¦ ¸¸µé ÇÊ¿ä°¡ ¾øÀ¸¸ç( °Ë»öÁ¶°ÇÀÌ ÀÖÀ» °æ¿ì´Â »ý¼º°í·Á)
TABLE2´Â ÀϹÝÀûÀ¸·Î Á¾·áÀϸ¸ À妽º¿¡ Æ÷ÇԵ˴ϴÙ.
(µ¥ÀÌÅÍ°¡ °è¼Ó ½×À̱⠶§¹®¿¡ ½ÃÀÛÀÏÀº °Ë»öÁ¶°Ç¿¡ Ç×»ó ¸¸Á·ÇÏ´Â °æ¿ì°¡ ¸¹¾Æ INDEX ±¸½ÇÀ» ¸øÇÕ´Ï´Ù.)
À妽º¸¦ Ÿ°Ô Äõ¸®ÇÏ´Â ¹æ¹ýµµ ÀÖ½À´Ï´Ù.
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¸¦ ±¸¼ºÇÏ´Â °ÍÀ» ±ÇÀåÇÏÁö ¾Ê½À´Ï´Ù.