¿ì¼±,
Ä÷³ÀÌ 50Á¤µµ¸é ¿ëµµ³ª º¸´Â ±âÁØ¿¡ µû¶ó ´Ù¸£°ÚÁö¸¸
Å©´Ù°í ¸»ÇÒ¼öµµ ¾ø½À´Ï´Ù.
¹°·Ð À¥°Ô½ÃÆÇ°ú ºñ±³ÇÏ¸é ´ç¿¬È÷ Å©Áö¸¸ ´ë¿ë·® DB °°Àº
°æ¿ì¿¡´Â °áÄÚ Å©´Ù°í ¸»ÇÒ¼ö´Â ¾ø½À´Ï´Ù.
Å×À̺íÀ» ÂÉ°³¾úÀ» °æ¿ì join À¸·Î ´Ù½Ã ¹¾îÁÙ °æ¿ì
¼¹öÀÇ ºÎ´ãÀÌ Å©°Å³ª ±ä ÇѹøÀÇ Äõ¸®º¸´Ù´Â µÎ¹øÀÇ Äõ¸®°¡
´õ ³ª»Ü°æ¿ì¿¡´Â ºñ·Ï ±× Ä÷³¼ö°¡ 50ÀÌ ³Ñ´õ¶óµµ
ÇϳªÀÇ Å×ÀÌºí¿¡ ´ã¾Æ¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.
¹°·Ð bit Á¤µµ¶ó¸é ´ë¿ë·®ÀÌ´õ¶óµµ ±»Áö ¿©·¯°³ÀÇ Ä÷³À»
»ç¿ëÇÒ ÇÊ¿ä´Â ¾ø°ÚÁö¿ä.
¹Ì¹Ö´ÔÀÌ ¿Ã¸°³»¿ë´ë·Î ÇϳªÀÇ Ä÷³À¸·Î »ç¿ëÇÏ¸é µÉ°Í °°±º¿ä.
¿ì¼± ÀÌ ¹®Á¦´Â Çٽɿ¡¼ ¶³¾îÁø ¹®Á¦À̹ǷΠÁ¢¾îµÎ°í,
WHERE $bin_search = (fieldname & $bin_search)
ÀÌ Äõ¸® ºÎºÐÀ»
WHERE fieldname & $bin_search
¶Ç´Â
WHERE (fieldname & $bin_search) > 0
ÀÌ·¸°Ô Çصµ µË´Ï´Ù.
±×¸®°í, sh. ´Ô°ú °°ÀÌ set ŸÀÔÀ» »ç¿ëÇÏ¸é ¿©·¯°¡Áö ÀåÁ¡À»
»ì¸±¼ö ÀÖ½À´Ï´Ù.
--------------------------------------------
(Ãʺ¸ÀÚ¸¦ À§Çؼ Á¶±Ý ±æ°Ô Àû¾ú½À´Ï´Ù.)
----------------------------------------------
¿ì¼±
100 °ú °°Àº ºñÆ®´ÜÀ§´Â ¹®ÀÚÇü ŸÀÔÀ¸·Î °áÁ¤ÇÏ·Á¸é
CHAR(50) ¶Ç´Â VARCHAR(50) À¸·Î ÁöÁ¤ÇØ¾ß Çϴµ¥ Å©±â°¡ 50 Bytes¶ó¼
ºÎÀûÀýÇÕ´Ï´Ù.
¹Ý¸é ¼ýÀÚÇü ŸÀÔÀ¸·Î °áÁ¤ÇÏ·Á¸é BIGINT(50) UNSIGNED ZEROFILL À¸·Î
ÇؾßÇϴµ¥ À̶§´Â Å©±â°¡ 8 Bytes ÀÔ´Ï´Ù.
(INTEGER ·Î¼´Â 2^50 = 1,125,899,906,842,624 ÀÇ Å©±â¸¦ ¸ðµÎ ´ãÀ» ¼ö ¾ø½À´Ï´Ù.)
Âü°í·Î BIGINT ´Â ÃÖ´ë 2^63 ±îÁö °¡´ÉÇÕ´Ï´Ù.
¼ýÀÚÇü ŸÀÔÀ¸·Î ¶ÇÇÑ DOUBLE Çüµµ °¡´ÉÇϴµ¥ À̵é
¼ýÀÚÇü ŸÀÔÀº ¸ðµÎ Á» ¾Ë¾Æº¸±â°¡ Èûµé´Ù´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù.
µû¶ó¼ Á¦ÀÏ ÀûÀýÇÑ Å¸ÀÔÀº SET ŸÀÔÀ¸·Î 64°³ÀÇ ¸®½ºÆ® Áï,
ÃÖ´ë 2^64 À̶ó´Â °æ¿ìÀÇ ¼ö¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
Å©±â´Â ¼ýÀÚÇüŸÀÔ°ú ¸¶Âù°¡Áö·Î ¸®½ºÆ® °³¼ö(L) ÀÌ 32 < L < 64 À̸é
8 Bytes ÀÔ´Ï´Ù.
SET ŸÀÔÀÇ ÀåÁ¡À¸·Î´Â
±× ¸®½ºÆ®¸¦ bit Çü ¼ýÀÚ ¶Ç´Â ¹®ÀÚ¿ ¸ðµÎ ¶Ç´Â ÀÌµé µÎ°³ÀÇ Á¶ÇÕÀ¸·Îµµ
°¡´ÉÇϱ⠶§¹®¿¡ Àß ±¸¼ºÇϸé Å×ÀÌºí¿¡¼ Á÷Á¢ ´«À¸·Î ½±°Ô ÆǺ°ÇÒ¼öµµ ÀÖ½À´Ï´Ù.
¿¹¸¦µé¾î, À§ÀÇ °æ¿ì¶ó¸é,
colanme SET('1','2','3','4','5',...) DEFAULT ...
¶Ç´Â
colanme SET('1','2','4','8','16',...) DEFAULT ... <---- bit
¶Ç´Â
colanme SET('1st','2st','3st','4st','5st',...) DEFAULT ...
¶Ç´Â
colanme SET('a','b','c','d','e',...) DEFAULT ...
...
µîµî ¿©·¯°¡Áö ÇüÅ·Π°¡´ÉÇÏ°í ½ÇÁ¦·Î À̵éÀº ³»ºÎÀûÀ¸·Î
¸ðµÎ µÎ¹ø° ¿¹ÀÎ ºñÆ®´ÜÀ§·Î DB ¿¡ ÀúÀåµË´Ï´Ù.
4¹ø°ÀÇ °æ¿ì¶ó¸é
a => 1
b => 2
c => 4
d => 8
e => 16
ÀÌ¿Í°°ÀÌ ³»ºÎ´Â ½ÇÁ¦ÀÇ ¹®ÀÚ³ª ¹®ÀÚ¿·Î ¿¬»êÇÏÁö ¾Ê°í ¿À¸¥ÂÊÀÇ ºñÆ®´ÜÀ§ÀÎ ¼ýÀÚ·Î
Áõ°¡ÇÏ¸é¼ ÀúÀåµÇ°í ¼ýÀÚÇüÀ¸·Î ºñ±³Çϱ⠶§¹®¿¡ »ó´çÈ÷ ºü¸¥´Ù´Â ÀåÁ¡ÀÌ
ÀÖ½À´Ï´Ù.
Âü°í·Î, ENUM Àº 1¾¿ Áõ°¡ÇÏ°í ÅÃÀÏÀÌÁö¸¸, SET ŸÀÔÀº ºñÆ® ´ÜÀ§·Î Áõ°¡ÇÏ°í
´ÙÁß¼±ÅÃÀÌ °¡´ÉÇÕ´Ï´Ù. ¹°·Ð Å©±â´Â ENUM ÀÌ ´õ ÀÛ½À´Ï´Ù.
SET ŸÀÔÀÇ ÀÚ·áÀÔ·ÂÀº
¿¹)
INSET INTO SET ... colname = 'a';
INSET INTO SET ... colname = 'a,b';
INSET INTO SET ... colname = 'b,a'; // ¼ø¼°¡ ¹Ù²î¸é a,b ¼ø¼·Î ÀÚµ¿À¸·Î ÀúÀå
INSET INTO SET ... colname = 'd,e';
INSET INTO SET ... colname = 'b,c,d';
ÀÌ¿Í °°Àº Çü½ÄÀ¸·Î ÀڷḦ ÀÔ·ÂÇÏ¸é µË´Ï´Ù.
À̵éÀ» °¢°¢
'a' => 1
'a,b' => 1 + 2 = 3
'd,e' => 8 + 16 = 24
'b,c,d' => 2 + 4 + 8 = 14
ÀÌ·¸°Ô ³»ºÎÀûÀÎ ºñÆ®´ÜÀ§·Î ÀúÀåµÇ°í ¿¬»êµË´Ï´Ù.
Ãâ·ÂÀº ºñÆ®´ÜÀ§ÀÇ ¼ýÀÚ°¡ ¾Æ´Ñ ¿ø·¡ÀÇ ÀúÁ¤ÇÑ ÇüÅÂÀÇ ÀÚ·áÇüÀ¸·Î
Ãâ·ÂµË´Ï´Ù.
°Ë»öºÎºÐ¿¡ ´ëÇؼµµ ¼ýÀÚÇü BIGINT ¿Í °°ÀÌ ¼ýÀÚÇü ¿¬»êµµ
°¡´ÉÇÒ »Ó´õ·¯ ¹®ÀÚ¿ ºñ±³µµ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
BININT °°Àº °æ¿ìµµ LIKE ¿Í °°Àº ¹®ÀÚ¿ ºñ±³ ¿¬»êµµ °¡´ÉÇÏÁö¸¸
À߸øµÈ °á°ú°¡ ³ª¿Ã ¼ö Àֱ⠶§¹®¿¡ ¿ª½Ã °ï¶õÇÕ´Ï´Ù.
¹Ý¸é SET ŸÀÔÀº ¹®ÀÚ¿·Îµµ Ãë±Þ°¡´ÉÇϹǷΠLIKE ¿¡ ´ëÇÑ À߸øµÈ
°á°ú°¡ ³ª¿À´Â °æ¿ì´Â ¾ø½À´Ï´Ù.
±»Áö ¿¹¸¦ µéÀÚ¸é(¹®ÀÚÇüÅ·ΠÀúÀåµÇ¾úÀ» °æ¿ì),
1) ¹®ÀÚ¿·Î Ãë±ÞÇÒ °æ¿ì
SELECT ... WHERE colname = 'a,b'; // a ¿Í b ¸¸ ¼±ÅÃÇÑ °æ¿ì
SELECT ... WHERE colname LIKE 'a%'; // ÃÖ¼ÒÇÑ a ¸¦ ¼±ÅÃÇÑ °æ¿ì
SELECT ... WHERE colname IN('a','b'); // a ¶Ç´Â b ¸¸ ¼±ÅÃÇÑ °æ¿ì
SELECT ... WHERE FIND_IN_SET('a',colname); // ÃÖ¼ÒÇÑ a ¸¦ ¼±ÅÃÇÑ °æ¿ì
SELECT ... WHERE INSTR(colname,'a'); // ÃÖ¼ÒÇÑ a ¸¦ ¼±ÅÃÇÑ °æ¿ì
...
2) ºñÆ®ÀÇ ¼ýÀÚÇüÀ¸·Î Ãë±ÞÇÒ °æ¿ì
SELECT ... WHERE colname = 1; // 1 = 2^0 À̹ǷΠù¹ø°ÀÎ a ¸¸ ¼±ÅÃÇÑ °æ¿ìÀÓ
SELECT ... WHERE colname >= 1; // ÃÖ¼ÒÇÑ a ¸¦ ¼±ÅÃÇÑ °æ¿ì
SELECT ... WHERE colname = 3; // ÀÌ°ÍÀº a ¿Í b ¸¸ ¼±ÅÃÇÑ °æ¿ìÀÓ
SELECT ... WHERE
3) ºñÆ®´ÜÀ§·Î Ãë±ÞÇÒ °æ¿ì(bit ¿¬»ê)
SELECT ... WHERE colname & 1; // ÃÖ¼ÒÇÑ a ¸¦ ¼±ÅÃÇÑ °æ¿ì
SELECT ... WHERE colname & 3; // ÃÖ¼ÒÇÑ a ¶Ç´Â b¸¦ ¼±ÅÃÇÑ °æ¿ì(°£´ÜÇÑ OR ¿¬»ê¿¡ ÀÌ¿ë)
ÀÌ¿Í °°ÀÌ ¿©·¯°¡Áö ÇüÅ·ΠSQL ¹®À» ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀÌ ±× ÀåÁ¡ÁßÀÇ ÇϳªÀÔ´Ï´Ù. |