mysql select ¹® Áú¹®ÀÔ´Ï´Ù.

   Á¶È¸ 3759   Ãßõ 0    

 안녕하세요


mysql 에서 아래 쿼리를 실행했습니다.

SELECT * FROM nn.dataset_2day_normalize_60 where date >20120331 and date < 20150101;


DB Type은 MyISam 입니다.

index는 date에 걸어 놓았고

Data는 column 이 1684개 입니다. (자료형은 Float 입니다.)

전체 테이블은 9G 정도 되는데

위의 쿼리 시행 시간이 30분을 돌려도 끝나지 않습니다.

계속 놔두면 언젠가 끝나기는 합니다.


어떻게 해야 속도가 빨라질까요?

ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
¾Æ·¡ ¸í·É¾î·Î ¸ÕÀú ½ÇÇà°èȹÀ» È®ÀÎÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù.
EXPLAIN SELECT * FROM nn.dataset_2day_normalize_60 where date >20120331 and date < 20150101;

½ÇÁ¦·Î À妽º°¡ Àß ÀÛµ¿ÇÏ´ÂÁö È®ÀÎÇϽÅÈÄ ¹®Á¦°¡ µÈ´Ù¸é Force IndexµîÀ¸·Î °­Á¦·Î ¼³Á¤ÇÒ ÇÊ¿äµµ ÀÖ½À´Ï´Ù.
±×¸®°í SELECT Á¶È¸ Ä÷³Àº ÇÊ¿äÇÑ Ä÷³¸¸ ¸í½ÃÇÏ´Â°Ô ÁÁ½À´Ï´Ù.
     
°¨»çÇÕ´Ï´Ù
explainÀ» ¸ÕÀú ÇØ ºÁ¾ß°Ú³×¿ä
     
explain SELECT * FROM nn.dataset_2day_normalize_60 force index (idx1) where date > 20141231;

id 1
select_type : Simple
Table : dataset_2day_normalize_60
partitions : null
type : range
possible_keys :idx1
Key : idx1
key_len : 4
ref : null
rows: 639588
filtered : 100.00
Extra : using index condition

À¸·Î ³ª¿À´Âµ¥µµ ´À¸³´Ï´Ù. (idx1°¡ date index ÀÔ´Ï´Ù.)

¶Ç Çغ¼ ¼ö ÀÖ´Â °ÍÀÌ ÀÖÀ»±î¿ä?
          
force index (idx1) ÀÌ°Í »©°í explain ÇØ º¸¼¼¿ä.
¿ø·¡ index ¾ÈŸ´Âµ¥ ÀÌ°Í³Ö¾î °­Á¦·Î Å¿ì¸é ¿ÀÈ÷·Á ´À·ÁÁú ¼ö ÀÖ½À´Ï´Ù.
date >20120331 and date < 20150101 ÀÌ Á¶°ÇÀ¸·Î ºÁ¼­´Â ±â°£ Á¶°ÇÀÌ ¸Å¿ì ³Ð¾î
index¸¦ ¾ÈÅ» °ÍÀ¸·Î º¸À̰ŵç¿ä.
index¸¦ ¸¸µé¾ú´Ù°í Çصµ
Àüü °Ç¼ö¿¡ ºñÇØ select °Ç¼ö°¡ ÀÏÁ¤% º¸´Ù ¸¹À¸¸é
full select °¡
»¡¶ó ±×·¸°Ô ó¸® µË´Ï´Ù.
Ä÷³¼ö°¡ 1684°³¿ä?
ºÐÇÒÀÌ ÇÊ¿äÇØ º¸À̳׿ä.
where Á¶°Ç ¹üÀ§¸¦ ºÁ¼­
Index¸¦ ¾ÈÅ» °¡´É¼ºµµ º¸À̳׿ä.
     
ÀÌ·± Á¶°Ç¿¡¼­ À妽º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖÀ»±î¿ä?
          
where Á¶°ÇÀ» index°¡ Å» ¼ö ÀÖÀ» Á¤µµ·Î ÁÙ¿©¼­
¹Ýº¹ ½ÇÇà ÇÏ´Â °ÍÀÌ ´õ ºü¸¦ ¼ö ÀÖ½À´Ï´Ù

Àå±âÀûÀ¸·Î´Â
Å×À̺íÀ» Á¤±ÔÈ­(¼öÁ÷ºÐÇÒ Æ÷ÇÔ), ÆÄƼ¼Å´×ÀÌ ÇÊ¿äÇØ º¸ÀÔ´Ï´Ù.
À妽º°¡ Á¦´ë·Î °É·Á ÀÖÀ¸¸é ÃÊ ´ÜÀ§ ¹Ì¸¸¿¡¼­ ´äÀÌ ³ª¿Í¾ß ÇÒ°Í °°Àºµ¥¿ä?
     
Áö±ÝÀº °ÅÀÇ 40~50ºÐ °É¸³´Ï´Ù...
SELECT ÇÒ¶§¸Å¹ø 1684°³ÀÇ Ä÷³ µ¥ÀÌÅÍ°¡ ´Ù ÇÊ¿äÇϽŰǰ¡¿ä?

WHERE Àý¿¡ ÇØ´çÇÏ´Â µ¥ÀÌÅͶû idx¸¸ ³²°Ü ³õ°í, ºÐ¸®µÇ¾î ÀÖ´Â Å×ÀÌºí¿¡¼­ ³ª¸ÓÁö Ä÷³ °ªÀ» ¼öÁýÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇÏ¸é ¸î Ãʵµ ¾È °É¸± ¹®Á¦ °°½À´Ï´Ù.
°¡´ÉÇϽøé DB¸¦ SSD³ª Á» ´õ ºü¸¥ ȯ°æÀ¸·Î ÀÎÇÁ¶ó ȯ°æÀ» ¹Ù²ã º¸½Ã´Â °Íµµ ¹æ¹ýÀÏ °Í °°½À´Ï´Ù.
     
°è¼Ó ¼­ºñ½º µÇ´Â°Ô ¾Æ´Ï¶ó
1ȸ ¼ºÀ¸·Î ÀڷḦ ¸¸µå´Â ÁßÀ̾
Àüü µ¥ÀÌÅÍ´Â ¸ðµÎ ÇÊ¿äÇÑ »óȲÀÔ´Ï´Ù.
DB´Â SSD¿¡ ¿Ã¶ó°¡ ÀÖ½À´Ï´Ù
¾Æ´Ï ¹«½¼ Å×À̺íÀÌ ¿·À¸·Î Àڶ󳪿ä?
ÂÊÁö ÁֽŠ³»¿ëÀ» º¸¸é À妽º ó¸® µÇÁö ¾Ê°í ÀÖ½À´Ï´Ù.
     
¿¹ ±×·¡¼­ Force¸¦ Çߴµ¥
À§¿¡ ´äº¯ ÁֽŠ°Í º¸´Ï±î °­Á¦ Force´Â ¿ÀÈ÷·Á ´À¸± ¼ö ÀÖ´Ù·Î ÇϽôõ¶ó°í¿ä.

¼ýÀÚ¸¦ ÁÙ¿©¼­ ¿©·¯¹ø ÇÏ´Â°Ô ¹æ¹ýÀÏ°Í °°½À´Ï´Ù.
±èÁ¦¿¬ 2017-04
select a.*
from (
SELECT id°ª
FROM nn.dataset_2day_normalize_60 where date >20120331 and date < 20150101
) b join nn.dataset_2day_normalize_60 a on b.id°ª = a.id°ª

ÀÌ·¸°Ô Çѹø Çغ¸¼¼¿ä
     
PK °¡ ´ÙÁßÅ° ID¸¦ ÀÌ·¸°Ô ¾²¸é ¾ÈµÇÁö¿ä?

select a.*
from (
SELECT code, date
FROM nn.dataset_2day_normalize_60 where date >20120331 and date < 20150101
) b join nn.dataset_2day_normalize_60 a on ( (b.code = a.code) and (b.date = a.date) )
          
±èÁ¦¿¬ 2017-04
ÀÏ´Ü Çغ¸½Ã¸é µÉ°Í °°Àºµ¥¿ä . Á¦°¡ Ãʺ¸¶ó .. ´ÙÁßÄ®·³pk ´Â ¾È½áºÃ³×¿ä ..
               
ÀÏ´ÜÀº ¹üÀ§¸¦ ÁÙ¿©¼­ ÇØ ºÃ´Âµ¥

select a.*
from (
SELECT code, date
FROM nn.dataset_2day_normalize_60 where date >= 20120101 and date < 20120201
) b join nn.dataset_2day_normalize_60 a on ((b.code = a.code) and (b.date = a.date));

º¸´Ù

SELECT * FROM nn.dataset_2day_normalize_60 where date >= 20120101 and date < 20120201;
°¡ ºü¸¥ °Í °°½À´Ï´Ù.
1ȸ¼ºÀÌ°í Àüü µ¥ÀÌÅÍ°¡ ¸ðµÎ ÇÊ¿äÇÑ °æ¿ì¸é
¿ù´ÜÀ§ Á¤µµ·Î where Á¶°Ç ÁÙ¿©¼­ ¹Ýº¹ ½ÇÇàÇϽô °ÍÀÌ
°¡Àå »¡¸® ÁøÇàÇÒ ¼ö ÀÖÀ» °ÍÀ¸·Î º¸ÀÔ´Ï´Ù.
Àε¦½Ì µÇ¾î ÀÖ´Ù°í »ý°¢ÇÏÁö¸¸ ½ÇÁ¦·Î´Â ¾ÈµÇ¾î Àִ°ÍÀÎÁö ¾Æ´Ï¸é Àε¦½Ì µÇ¾î ÀÖÁö¸¸ À妽º¸¦ ŸÁö ¾Ê°í Äõ¸® µÇ´Â°ÍÀÎÁö È®ÀÎ ÇغÁ¾ß ÇÒ °Í °°½À´Ï´Ù.

SHOW INDEX FROM nn.dataset_2day_normalize_60 °á°ú ¿Ã·ÁÁຸ¼¼¿ä
     
ÂÊÁö·Î º¸³»µå·È½À´Ï´Ù.
µµ¿ÍÁּż­ °¨»çÇÕ´Ï´Ù.


QnA
Á¦¸ñPage 1968/5686
2014-05   4974920   Á¤ÀºÁØ1
2015-12   1511076   ¹é¸Þ°¡
2016-08   5943   Çϼ¿È£ÇÁ
2012-03   5943   ¼Õ°ß±Ç
2012-04   5943   ¹Ì¼ö¸Ç
2015-10   5943   ¾Æ³¯·Î±×
2005-06   5943   ÀÎÄ¡µ¿
2017-04   5943   ¿¹¸°ÆÄÆÄ
2016-07   5943   online9
2015-03   5943   À©98
2018-04   5943   Çϼ¿È£ÇÁ
2015-10   5943   °û¼øÇö
2009-02   5943   ¶Ñ¶Ñ±è´ë¿ø
2006-08   5943   Á¤¼ºÈÆ
2006-04   5942   ¾ÈÀç¿ø
2006-06   5942   °ûÅ¿µ
2013-05   5942   ÀÌÁÖÇõ
2009-09   5942   2CPUÃÖÁÖÈñ
2015-02   5942   ¹«¾Æ
2020-04   5942   Áø½ÅµÎ
2007-03   5942   °¡µ¿À±
2006-07   5942   ±èµ¿¿í