Top

[Mysql] Explain Á¤º¸º¸´Â¹ý | Web-Programing
±è°æÈÆ (admin) | Editor | 2015/09/15 14:10:27 | Á¶È¸:5971

Explain Á¤º¸º¸´Â¹ý

À妽º°¡ ÀûÀýÈ÷ »ç¿ëµÇ°í ÀÖ´ÂÁö °ËÅä
³ª¿­µÈ ¼ø¼­´Â MYSQL ÀÌ Äõ¸®Ã³¸®¿¡ »ç¿ëÇÏ´Â ¼ø¼­´ë·Î Ãâ·Â


EXPLAIN ÀÇ °¢ Çà ¼³¸í

A.          id :

      Äõ¸® ó¸® ¼ø¼­

B.          select_type:

      SELECT ÀÇ Å¸ÀÔ ( Á¾·ù)

     - SIMPLE:

     ´Ü¼ø SELECT (UNION À̳ª SUB-QUERY°¡ ¾ø´Â SELECT ¹®)

     - PRIMARY: 

     SUB-QUERY¸¦ »ç¿ëÇÒ °æ¿ì SUB-QUERY ÀÇ ¿ÜºÎ¿¡ ÀÖ´Â Äõ¸®(ù¹ø° Äõ¸®)

     UNION À» »ç¿ëÇÒ °æ¿ì UNIONÀÇ Ã¹¹ø° SELECT Äõ¸®.

     - UNION:

     UNION Äõ¸®¿¡¼­ PRIMARY¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö SELECT

     - DEPENDENT UNION:

     UNION °ú µ¿ÀÏÇϳª¿ÜºÎÄõ¸®¿¡ ÀÇÁ¸ÀûÀÓ (°ªÀ» °ø±Þ ¹ÞÀ½)

     - UNION RESULT

     UNION Äõ¸®ÀÇ °á°ú¹°

     - SUBQUERY:

     SUB-QUERY  ¶Ç´Â SUB-QUERY¸¦ ±¸¼ºÇÏ´Â ¿©·¯ Äõ¸® Áß Ã¹¹ø° SELECT¹®

     - DEPENDENT SUBQUERY:

     SUB-QUERY ¿Í µ¿ÀÏÇϳª ¿Ü°ûÄõ¸®¿¡ ÀÇÁ¸ÀûÀÓ  ( °ªÀ» °ø±Þ ¹ÞÀ½)

     - DERIVED:

     SELECT ·Î ÃßÃâµÈ Å×À̺í (FROM Àý ¿¡¼­ÀÇ ¼­ºêÄõ¸® ¶Ç´Â INLINE VIEW)

     - UNCACHEABLE SUBQUERY:

     SUB-QUERY¿Í µ¿ÀÏÇÏÁö¸¸°ø±ÞµÇ´Â ¸ðµç °ª¿¡ ´ëÇØ SUB-QUERY¸¦ Àç󸮿ܺÎÄõ¸®¿¡¼­ °ø±ÞµÇ´Â °ªÀÌ µ¿ÀÏÇÏ´õ¶óµµ CACHEµÈ °á°ú¸¦ »ç¿ëÇÒ¼ö ¾øÀ½.

     - UNCACHEABLE UNION:

     UNION  °ú µ¿ÀÏÇÏÁö¸¸°ø±ÞµÇ´Â ¸ðµç °ª¿¡ ´ëÇÏ¿© UNION Äõ¸®¸¦ Àçó¸®.

C.          table:

     table ¸í ȤÀº Alias

D.          type:

      data access  ŸÀÔ¿ì¼öÇÑ ¼ø¼­´ë·Î... µÚ·Î°¥¼ö·Ï ³ª»Û Á¶ÀÎÇüÅÂ

     system

     Å×ÀÌºí¿¡ ¿ÀÁ÷ ÇϳªÀÇ row¸¸ ÀÖ¾î Å×ÀÌºí¿¡¸ÅĪµÇ´Â row°¡ ¹«Á¶°Ç 1°ÇÀÎ °æ¿ì, Const Å¸ÀÔÀÇ Æ¯º°ÇÑ ÄÉÀ̽º

     - const

     ¸ÅĪµÇ´Â row°¡ ¿ÀÁ÷ 1°ÇÀÎ °æ¿ì

     °¡Àå ºü¸¥ °æ¿ìÀ̸ç¿ÉƼ¸¶ÀÌÀú°¡ rowÀ» ã±â À§ÇØ Unique/Primary Key »ç¿ë

     °¢ Ä÷³ °ªÀº ³ª¸ÓÁö ¿¬»ê¿¡¼­ »ó¼ö·Î °£ÁÖóÀ½Çѹø¸¸ ÀÐ¾î µéÀÌ¸é µÇ¹Ç·Î ¸Å¿ì ºü¸§

     - eq_ref

     ÀÌÀü Å×ÀÌºí¿¡¼­ °ø±Þ¹ÞÀº °ªÀ¸·Î Á¶ÀΠ󸮽à ´Ü ÇϳªÀÇrow¸¸ÀÌ Á¶ÀεǴ Å×ÀÌºí¿¡ Á¸ÀçÇÏ´Â °æ¿ì

     Á¶ÀΠŸÀÔ Áß °ÅÀÇ ÃÖ»óÀÇ °æ¿ìÀ̸çÁ¶ÀεǴÂÅ×À̺íÀÇ Unique/Primary Key¸¦ »ç¿ë (1:1 °ü°è)

     - ref

     ÀÌÀü Å×ÀÌºí¿¡¼­ °ø±Þ¹ÞÀº °ªÀ¸·Î Á¶ÀΠ󸮽à Çϳª ÀÌ»óÀÇrow°¡ Á¶ÀεǴ Å×ÀÌºí¿¡ Á¸ÀçÇÏ´Â °æ¿ì

     Á¶ÀÎÀ» ó¸®ÇÒ ¶§ Unique/Primary Key¸¦ 100% »ç¿ëÇÏÁö ¸øÇϰųª Non-Unique À妽º¸¦ »ç¿ë (1:n °ü°è)

     ´ÜÀÏ Äõ¸®ÀÎ °æ¿ì WHERE Á¶°Ç 󸮸¦ À§ÇØ Non-Unique À妽º¸¦ »ç¿ë

     À妽º¸¦ »ç¿ëÇÏÁö¸¸ Á¦°øµÇ´Â °ª¿¡ ¸ÅĪµÇ´Â row°¡¸¹Áö ¾ÊÀº °æ¿ì ³ª»ÚÁö ¾ÊÀº ŸÀÔÀÓ

     - ref_or_null

      ref ¿Í °°Áö¸¸ IS NULL ÃÖÀûÈ­°¡ ¼öÇà µÊ

      - fulltext

      Full Text À妽º¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅÍ Access (Only MyISAM)

      - index_merge

      µ¿ÀÏÇÑÅ×ÀÌºí¿¡¼­ µÎ °³ ÀÌ»óÀÇ À妽º°¡ µ¿½Ã¿¡ »ç¿ëµÇ´Â °æ¿ì (fulltext À妽º Á¦¿Ü)

      À妽ºº´ÇÕ ÃÖÀûÈ­°¡ Àû¿ëµÇ´Â Á¶ÀΠŸÀÔ

      ÀÌ°æ¿ì, key Ä÷³Àº »ç¿ëµÈ À妽ºÀÇ ¸®½ºÆ®¸¦ ³ªÅ¸³½´Ù.

      - unique_subquery

      IN sub-query ¿¡¼­ Unique ÇÑ °á°ú°¡ ¸¸µé¾î Áö´Â °æ¿ì

      index lookup functionÀÌ »ç¿ëµÊ (¼­ºêÄõ¸® ÃÖÀûÈ­)

      - index_subquery

      unique_subquery¿Í À¯»ç

      IN sub-query °ªÀÌ Unique ÇÏÁö ¾ÊÀ½

      - range

      ÁÖ¾îÁø¹üÀ§ ³»ÀÇ row¸¦ ScanÇϸç Access ÇØ¾ß ÇÒ µ¥ÀÌÅÍÀÇ ¹üÀ§¿¡ Å©°Ô ¿µÇâÀ» ¹ÞÀ½

      Å°Ä÷³ÀÌ »ó¼ö¿Í =, <>, >, >=, <, <=, IS NULL,<=>, BETWEEN ¶Ç´Â IN ¿¬»ê¿¡ »ç¿ëµÉ ¶§ Àû¿ëµÊ

      - index

      ÀüüÀ妽º BlockÀ» ½ºÄµ ÇÏ´Â °æ¿ìÀ妽º BlockÀ» ½ºÄµ ÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϸé Full Table Sacn(ALL)°ú°°À½

     ÀϹÝÀûÀÎ °æ¿ì À妽º°¡ Å×ÀÌºíº¸´Ù »çÀÌÁî°¡ À۱⠶§¹®¿¡,ALLº¸´Ù´Â ºü¸¦ °¡´É¼ºÀÌ ³ôÀ½

      MySQL Àº Äõ¸®¿¡¼­ ´ÜÀÏ À妽ºÀÇ ÀϺκÐÀÎ Ä÷³À» »ç¿ëÇÒ ¶§ ÀÌ Á¶ÀΟÀÔÀ» Àû¿ëÇÔ

      - ALL

       †Ã¼µ¥ÀÌÅÍ BlockÀ» ½ºÄµ ÇÏ´Â °æ¿ì (Full Table Scan)

      ÀÌÀüÅ×À̺í°úÀÇ Á¶ÀÎÀ» À§ÇØ Ç®½ºÄµ

      (Á¶Àο¡ ¾²ÀÎù¹ø ° Å×À̺íÀÌ °íÁ¤ÀÌ ¾Æ´Ï¶ó¸é ºñÈ¿À²Àû

      ´ëºÎºÐÀÇ°æ¿ì¿¡ ¾ÆÁÖ ´À¸° ¼º´ÉÀ» º¸ÀÓ

E.          possible_keys:

     MySQL  ¿ÉƼ¸¶ÀÌÀú°¡ Äõ¸®Ã³¸®¸¦ À§ÇØ °í·ÁÇÑ ÀÎÅؽº Èĺ¸

     possible_keys ¿¡ ³ªÅ¸³­ À妽ºµéÀÌ°á°ú¿¡ ³ªÅ¸³­ Å×ÀÌºí ¼ø¼­¿¡¼­ ½ÇÁ¦ »ç¿ëÇÒ ¼ö ¾øÀ» ¼öµµ ÀÖÀ½

F.           key:

     MySQL  ¿ÉƼ¸¶ÀÌÀú°¡ ½ÇÁ¦»ç¿ëÇÑ key(index)

G.          key_len:

     MySQL  ÀÌ »ç¿ëÇÑ À妽ºÀÇ ±æÀÌ, key Ä÷³ °ªÀÌ NULL À̸é ÀÌ °ªµµ NULL

     key_len °ªÀ¸·Î MySQL ÀÌ ½ÇÁ¦ º¹¼ö Ä÷³ Å°Áß ¾ó¸¶³ª ¸¹Àº ºÎºÐÀ» »ç¿ëÇÒ °ÍÀÎÁö ¾Ë ¼ö ÀÖÀ½

H.          ref:

      ÇàÀ» ÃßÃâÇϴµ¥ Å°¿Í ÇÔ²² »ç¿ëµÈ Ä÷³À̳ª »ó¼ö °ª

I.           rows:

      Äõ¸®¸¦ ¼öÇàÇϱâ À§ÇØ °Ë»öÇØ¾ß ÇÒ RowÀÇ °³¼ö (¿ÉƼ¸¶ÀÌÀú¿¬»ê¿¡ µû¸¥ ÃßÁ¤Ä¡)

J.           Extra:

     MySQL  ¿ÉƼ¸¶ÀÌÀú°¡ Äõ¸®¸¦ Çؼ®ÇÑ Ãß°¡ÀûÀÎ Á¤º¸¸¦³ªÅ¸³¿

     - const row not found

     ´ë»ó Å×À̺íÀÌ empty Å×À̺íÀΰæ¿ì

     Distinct

      Distinct Äõ¸®¸¦ ¼öÇàÇÏ´Â °æ¿ìÀÌ¹Ì Ã³¸®ÇÑ °ª°ú µ¿ÀÏÇÑ °ªÀ»°¡£’ Row´Â ó¸®ÇÏÁö ¾ÊÀ½

      - Full scan on NULL key

      Index lookup functionÀÌ »ç¿ëµÇ´Â ¡°IN (Subquery)¡± Äõ¸®¿¡¼­ Outer Query¿¡¼­ NULL °ªÀÌ °ø±ÞµÇ´Â °æ¿ì ¹ß»ý

     Index lookup ½ÇÆзΠFull Table ScanÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ½

     - Impossible HAVING

      HAVING ÀýÀÌ Ç×»ó False ÀÎ °æ¿ì, SELECT Ã³¸®ÇÏÁö ¾ÊÀ½

      - Impossible WHERE

      WHERE ÀýÀÌ Ç×»ó False ÀÎ °æ¿ì, SELECT Ã³¸®ÇÏÁö ¾ÊÀ½

      - Impossible WHERE noticedafter reading const tables

      const/system Å¸ÀÔÀÇ Å×À̺íÀ» ÀÐÀº ÈÄ WHERE Á¶°ÇÀÌ Ç×»ó FalseÀÎ °ÍÀ» È®ÀÎ

      - No tables used

      FROM Àý¿¡ Å×À̺íÀÌ ¸í½ÃµÇÁö ¾ÊÀ½È¤Àº FROM DUAL ±¸¹®À» »ç¿ë

      - Not exists

      LEFT JOIN ÇüÅÂÀÇ Anti Join Äõ¸®¸¦ Not Exists ÇüÅ·ΠÃÖÀûÈ­ ÇÏ´Â °æ¿ì

      (Á¶°Ç¿¡ ¸Â´Â °á°ú¸¦ ãÀ¸¸é Ãß°¡ Join Ã³¸®ÇÏÁö ¾ÊÀ½)

      - range checked for eachrecord (index map: N)

      Á¶ÀÎ󸮽à ÀûÀýÇÑ À妽º°¡ ¾ø´Â »óȲ¿¡¼­¼±Çà Å×ÀÌºí¿¡¼­ °ø±ÞµÇ´Â °ª¿¡ µû¶ó À妽º »ç¿ëÀ» °ËÅäÇÒ ¼öÀÖ´Â °æ¿ì

      °ø±ÞµÇ´Â°¢°¢ÀÇ Row¿¡ ´ëÇØ range / index merge¸¦°ËÅä

      °ªÀº ¾î¶² À妽º°¡ °ËÅäµÇ¾ú´ÂÁö Ç¥½Ã (0x11011, 19  1, 4,5¹ø À妽º°¡ °ËÅä)

      - Select tables optimizedaway

      Äõ¸®°¡ Aggregate(¿¹: MAX) ÇÔ¼ö¸¸ Æ÷ÇÔÇÏ°í ÀÖ´Â °æ¿ì

      ¿ÉƼ¸¶ÀÌÀú´ÂÀ妽º Lookup ÈÄ 1°³ÀÇ °á°ú¸¸ ¸®ÅÏ

      - unique row not found

      const row not found¿Í °ÅÀÇ À¯»ç

      SELECT ¡¦ FROM TABLE Äõ¸®¿¡¼­ ¸¸Á·Çϴ row¸¦ ãÁö¸øÇÑ °æ¿ì

      - Using filesort

      MySQL ÀÌ Á¤·ÄÀ» À§ÇØ Ãß°¡ÀûÀÎ °úÁ¤À» ÇÊ¿ä·Î ÇÔ(¹°¸®ÀûÀÎ Á¤·ÄÀÛ¾÷ ¼öÇà

      - Using index

      ½ÇÁ¦µ¥ÀÌÅÍ BlockÀ» ÀÐÁö ¾Ê°í À妽º Block ¸¸À¸·Î °á°ú¸¦»ý¼ºÇÒ ¼ö ÀÖ´Â °æ¿ì (Covering Index)

      Äõ¸®¿¡¼­´ÜÀÏ À妽ºµÈ Ä÷³µé¸¸À» »ç¿ëÇÏ´Â °æ¿ì

      - Using index for group-by

      Using index¿Í À¯»çÇϸ絥ÀÌÅÍ BlockÀ» ÀÐÁö ¾Ê°í À妽º Block ¸¸À¸·Î Group-By / Distinct Ã³¸® (Covering Index)

      Loose Index Scan Ã³¸®

      - Using join buffer

      Join Ã³¸®½Ã Join Buffer°¡ »ç¿ëµÇ¾úÀ½À» ÀǹÌ

      Join Buffer´Â Join Ã³¸®¸¦ À§ÇÑ À妽º°¡ ¾øÀ» ¶§ »ç¿ëµÊ

      - Using sort_union(...),Using union(...), Using intersect(...)

      Index Merge ¼öÇàµÎ °³ ÀÌ»óÀÇ À妽º¸¦ µ¿½Ã¿¡ »ç¿ëÇÏ¿©Ã³¸®

      - Using temporary

      Äõ¸®Ã³¸®¸¦ À§ÇØ Àӽà Å×À̺íÀ» »ý¼º

      group by, order by Ä÷³ÀÌ °¢°¢ Ä÷³À» »ç¿ëÇÒ ¶§ ¹ß»ý.group by Ã³¸®¿¡ À妽º¸¦ »ç¿ëÇÏÁö ¸øÇÏ´Â °æ¿ì ¹ß»ý

      - Using where
WHERE 
ÀýÀÌ ´ÙÀ½ Á¶Àο¡ »ç¿ëµÉ ÇàÀ̳ª Ŭ¶óÀ̾ðÆ®¿¡°Ô µ¹·ÁÁú ÇàÀ» Á¦ÇÑÇÏ´Â °æ¿ì


l  extra Á¤¸®:  

Äõ¸®¸¦ °¡´ÉÇÑ ÇÑ ºü¸£°Ô ÇÏ·Á¸é, Extra °ªÀÇUsing filesort ³ª Using temporary ¿¡ ÁÖÀÇÇØ¾ß ÇÔ

EXPLAIN ÀÇ Ãâ·Â ³»¿ë Áß rows Ä÷³°ªµéÀ» °öÇغ½À¸·Î½á ¾ó¸¶³ª È¿°úÀûÀΠjoin À» ½ÇÇàÇÏ°í ÀÖ´ÂÁö ¾Ë ¼ö ÀÖ´Ù

°øÀ¯Çϱâ
°øÀ¯Çϱâ
5
0
0


´ñ±ÛÀ» ºÒ·¯¿À´Â ÁßÀÔ´Ï´Ù.
¡ã ÀÌÀü±Û ¡°ÀúÇ׿ÀÇ ÀûÀÀ¡± ÀÌ¿µÁø (y0758) 2015-09-18 19:27:17
¡å ´ÙÀ½±Û Áö³­ÁÖ(09¿ù 07ÀÏ ~ 09¿ù 13ÀÏ) ÁÖ°£·©Å· ¼øÀ§ Áý°è ±è°æÈÆ (admin) 2015-09-14 01:39:52