database.sarang.net
UserID
Passwd
Database
DBMS
¤ýMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB ¹®¼­µé
½ºÅ͵ð
Community
°øÁö»çÇ×
ÀÚÀ¯°Ô½ÃÆÇ
±¸ÀÎ|±¸Á÷
DSN °¶·¯¸®
µµ¿òÁֽźеé
Admin
¿î¿µ°Ô½ÃÆÇ
ÃֱٰԽù°
MySQL Columns 24199 °Ô½Ã¹° Àбâ
No. 24199
MySQL - Explain Á¤º¸º¸´Â¹ý
ÀÛ¼ºÀÚ
À̰æÈ¯(babocom)
ÀÛ¼ºÀÏ
2005-04-06 13:50:21
Á¶È¸¼ö
11,710

# À̱ÛÀº mysql document ÀÇ 7.2.1 Explain Syntax ¸¦ ´ë~Ãæ ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù.

# Æ´Æ´ÀÌ ¹ø¿ªÇϰí ÀÖÀ¸³ª ¾ðÁ¦ ¿Ï·áµÉÁö ¸ð¸¨´Ï´Ù..

 

EXPLAIN À» »ç¿ëÇÔÀ¸·Î½á À妽º°¡ ÀûÀýÈ÷ »ç¿ëµÇ°í ÀÖ´ÂÁö °ËÅäÇÒ ¼ö ÀÖ´Ù. À妽º°¡ À߸ø »ç¿ëµÇ°í ÀÖ´Ù¸é ANALYZE TABLE À» »ç¿ëÇÏ¿© Å×À̺íÀ» Á¡°ËÇ϶ó.
À̰ÍÀº Å×À̺íÀÇ »óŸ¦ °»½ÅÇÏ¸ç ¿ÉÆ¼¸¶ÀÌÀúÀÇ µ¿ÀÛ¿¡ ¿µÇâÀ» ÁØ´Ù.

 

¿ÉƼ¸¶ÀÌÀú°¡ SELECT ¿¡ ±â·ÏµÈ ¼ø¼­´ë·Î Á¶ÀÎÀ» ÇàÇÏ°Ô °­Á¦ÇÏ·Á¸é SELECT ´ë½Å¿¡ SELECT STRAIGHT_JOIN À» »ç¿ëÇ϶ó.

 

EXPLAIN Àº SELECT ¹®¿¡ »ç¿ëµÈ °¢ Å×À̺í´ç ÇϳªÀÇ ÇàÀ» ¸®ÅÏÇÑ´Ù. ³ª¿­µÈ ¼ø¼­´Â MYSQL ÀÌ Äõ¸®Ã³¸®¿¡ »ç¿ëÇÏ´Â ¼ø¼­´ë·Î Ãâ·ÂµÈ´Ù.

 

MYSQL Àº ¸ðµç Á¶ÀÎÀ» single-sweep multi-join ¹æ½ÄÀ» »ç¿ëÇÏ¿© ÇØ°áÇÑ´Ù. À̰ÍÀº MYSQL ÀÌ Ã¹¹øÂ° Å×ÀÌºí¿¡¼­ ÇÑÇàÀ» Àаí, µÎ¹øÂ° Å×ÀÌºí¿¡¼­ ¸ÅÄ¡µÇ´Â ÇàÀ» ã°í, ¼¼¹øÂ° Å×ÀÌºí¿¡¼­ ¸ÅÄ¡µÇ´Â ÇàÀ» ã°í.. ±×·¯ÇÑ ¹æ½ÄÀÌ´Ù. ¸ðµç Å×À̺íµéÀÌ Ã³¸®µÈ ÈÄ ÃßÃâµÈ Ä÷³À» Ãâ·ÂÇÏ°í ´Ù½Ã Ã³À½ Å×À̺í·Î µ¹¾Æ°¡¼­ Á¶ÀÎÀ» °è¼ÓÇÑ´Ù. ÀÌ·±½ÄÀ¸·Î ù¹øÂ° Å×ÀÌºí¿¡ ´õÀÌ»ó ³²´ÂÇàÀÌ ¾øÀ»¶§±îÁö ½ÇÇàÇÑ´Ù.

(¾î´À°ÍÀÌ Ã¹¹øÂ° Å×À̺íÀÌ µÉÁö´Â mysql ¿ÉƼ¸¶ÀÌÀú°¡ °áÁ¤ÇÒ ¹®Á¦ÀÌ´Ù. STRAIGHT_JOIN À» ¸í½ÃÇÏÁö ¾Ê¾Ò´Ù¸é À¯Àú°¡ ÀÔ·ÂÇÑ ¼ø¼­¿Í´Â °ü·ÃÀÌ ¾ø´Ù.)

 

MYSQL 4.1 ¹öÀü¿¡¼­ EXPLAIN ÀÇ Ãâ·ÂÆ÷¸äÀÌ UNION °ú subquery, derived table À» ´Ù·ç±â¿¡ ´õ È¿°úÀûÀ¸·Î º¯°æµÇ¾ú´Ù. ¹«¾ùº¸´Ù Áß¿äÇÑ °ÍÀº id , select_type ÀÇ µÎ Ä÷³ÀÌ Ãß°¡µÈ °ÍÀÌ´Ù.

 

EXPLAIN ÀÇ °¢ ÇàÀº ÇϳªÀÇ Å×ÀÌºí¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©ÁÖ¸ç ´ÙÀ½°ú °°Àº Ä÷³µé·Î ±¸¼ºµÈ´Ù.

  • id

    SELECT ¹øÈ£, Äõ¸®³»ÀÇ SELECT ÀÇ ±¸ºÐ¹øÈ£ÀÌ´Ù.

  • select_type

    SELECT ÀÇ Å¸ÀÔ, ´ÙÀ½°ú °°´Ù.

    • SIMPLE

      ´Ü¼ø SELECT (UNION À̳ª ¼­ºêÄõ¸®¸¦ »ç¿ëÇÏÁö ¾ÊÀ½)

    • PRIMARY

      °¡Àå ¿Ü°ûÀÇ SELECT

    • UNION

      UNION ¿¡¼­ÀÇ µÎ¹øÂ° ȤÀº ³ªÁß¿¡ µû¶ó¿À´Â SELECT

    • DEPENDENT UNION

      UNION ¿¡¼­ÀÇ µÎ¹øÂ° ȤÀº ³ªÁß¿¡ µû¶ó¿À´Â SELECT, ¿Ü°ûÄõ¸®¿¡ ÀÇÁ¸ÀûÀÌ´Ù.

    • UNION RESULT

      UNION ÀÇ °á°ú¹°.

    • SUBQUERY

      ¼­ºêÄõ¸®ÀÇ Ã¹¹øÂ° SELECT

    • DEPENDENT SUBQUERY

      ¼­ºêÄõ¸®ÀÇ Ã¹¹øÂ° SELECT, ¿Ü°ûÄõ¸®¿¡ ÀÇÁ¸ÀûÀÌ´Ù.

    • DERIVED

      SELECT ·Î ÃßÃâµÈ Å×À̺í (FROM Àý ³»ºÎÀÇ ¼­ºêÄõ¸®)

  • table

    ³ªÅ¸³­ °á°ú°¡ ÂüÁ¶ÇÏ´Â Å×À̺í¸í.

  • type

    Á¶ÀΟÀÔ, ¾Æ·¡¿Í °°´Ù. ¿ì¼öÇÑ ¼ø¼­´ë·Î µÚ·Î°¥¼ö·Ï ³ª»Û Á¶ÀÎÇüÅÂÀÌ´Ù.

    • system

      Å×ÀÌºí¿¡ ´Ü ÇϳªÀÇ Çุ Á¸Àç(½Ã½ºÅÛ Å×À̺í). const join ÀÇ Æ¯¼öÇÑ °æ¿ìÀÌ´Ù.

    • const

      ¸¹¾Æ¾ß ÇϳªÀÇ ¸ÅÄ¡µÇ´Â Çุ Á¸ÀçÇÏ´Â °æ¿ì. ÇϳªÀÇ ÇàÀ̱⠶§¹®¿¡ °¢ Ä÷³°ªÀº ³ª¸ÓÁö ¿¬»ê¿¡¼­ »ó¼ö·Î °£ÁֵǸç, óÀ½ Çѹø¸¸ ÀоîµéÀÌ¸é µÇ±â ¶§¹®¿¡ ¹«Áö ºü¸£´Ù.
      PRIMARY KEY ³ª UNIQUE index ¸¦ »ó¼ö¿Í ºñ±³ÇÏ´Â °æ¿ì.
      ¾Æ·¡ÀÇ °æ¿ì¿¡¼­ tbl_name Àº const table ·Î Á¶ÀεȴÙ.

      SELECT * FROM tbl_name WHERE primary_key=1;
      SELECT * FROM tbl_name
      WHERE primary_key_part1=1 AND primary_key_part2=2;

    •  

    • eq_ref

      Á¶ÀμöÇàÀ» À§ÇØ °¢ Å×ÀÌºí¿¡¼­ Çϳª¾¿ÀÇ ÇุÀÌ ÀÐÇôÁö´Â ÇüÅÂ. const ŸÀÔÀ̿ܿ¡ °¡Àå ÈǸ¢ÇÑ Á¶ÀΟÀÔ´Ï´Ù.
      Á¶Àο¬»ê¿¡ PRIMARY KEY ³ª UNIQUE index À妽º°¡ »ç¿ëµÇ´Â °æ¿ì.
      À妽ºµÈ Ä÷³ÀÌ = ¿¬»ê¿¡ »ç¿ëµÇ´Â °æ¿ì. ºñ±³µÇ´Â °ªÀº »ó¼öÀ̰ųª ÀÌÀüÁ¶Àΰá°úÀÇ Ä÷³°ªÀϼö ÀÖ´Ù.
      ´ÙÀ½ ¿¹¿¡¼­ MySQL Àº ref_table À» ó¸®Çϴµ¥ eq_ref Á¶ÀÎÀ» »ç¿ëÇÑ´Ù.

      SELECT * FROM ref_table,other_table
      WHERE ref_table.key_column=other_table.column;
      SELECT * FROM ref_table,other_table
      WHERE ref_table.key_column_part1= other_table.column
      AND ref_table.key_column_part2=1;

    •  

    • ref

      ÀÌÀü Å×À̺í°úÀÇ Á¶Àο¡ »ç¿ëµÉ ¸ÅÄ¡µÇ´Â À妽ºÀÇ ¸ðµçÇàÀÌ ÀÌ Å×ÀÌºí¿¡¼­ ÀÐÇôÁø´Ù. leftmost prefix ۸¸À» »ç¿ëÇϰųª »ç¿ëµÈ ۰¡ PRIMARY KEY ³ª UNIQUE °¡ ¾Æ´Ò¶§(Áï ۰ªÀ¸·Î ´ÜÀÏÇàÀ» ÃßÃâÇÒ¼ö ¾øÀ»¶§) »ç¿ëµÇ´Â Á¶ÀÎ.
      ¸¸¾à »ç¿ëµÈ ۰¡ ÀûÀº¼öÀÇ Çà°ú ¸ÅÄ¡µÉ¶§ À̰ÍÀº ÀûÀýÇÑ Á¶ÀΠŸÀÔ´Ï´Ù.
      ref ´Â À妽ºµÈ Ä÷³°ú = ¿¬»ê¿¡¼­ »ç¿ëµÈ´Ù.
      ¾Æ·¡ ¿¹¿¡¼­ MySQL Àº ref_table 󸮿¡ ref Á¶ÀΠŸÀÔÀ» »ç¿ëÇÑ´Ù.

      SELECT * FROM ref_table WHERE key_column=expr;
      SELECT * FROM ref_table,other_table
      WHERE ref_table.key_column=other_table.column;
      SELECT * FROM ref_table,other_table
      WHERE ref_table.key_column_part1= other_table.column
      AND ref_table.key_column_part2=1;

       

    • ref_or_null

      ref ¿Í °°Áö¸¸ NULL °ªÀ» Æ÷ÇÔÇÏ´Â Çà¿¡´ëÇÑ °Ë»öÀÌ ¼ö¹ÝµÈ´Ù.
      4.1.1 ¿¡¼­ »õ·Ó°Ô µµÀÔµÈ Á¶ÀΟÀÔÀÌ¸ç ¼­ºêÄõ¸® 󸮿¡¼­ ´ë°³ »ç¿ëµÈ´Ù.
      ¾Æ·¡ ¿¹¿¡¼­ MySQL Àº ref_table 󸮿¡ ref_or_null Á¶ÀΟÀÔÀ» »ç¿ëÇÑ´Ù.

      SELECT * FROM ref_table
      WHERE key_column=expr OR key_column IS NULL; 
      

      See Section 7.2.7, ¡°How MySQL Optimizes IS NULL¡±.

    • index_merge

      À妽º º´ÇÕ ÃÖÀûÈ­°¡ Àû¿ëµÇ´Â Á¶ÀΠŸÀÔ.
      ÀÌ °æ¿ì, key Ä÷³Àº »ç¿ëµÈ À妽ºÀÇ ¸®½ºÆ®¸¦ ³ªÅ¸³»¸ç key_len Ä÷³Àº »ç¿ëµÈ À妽ºÁß °¡Àå ±ä key ¸íÀ» ³ªÅ¸³½´Ù.
      For more information, see
      Section 7.2.6, ¡°Index Merge Optimization¡±.

    • unique_subquery

      À̰ÍÀº ¾Æ·¡¿Í °°Àº ¸î¸î IN ¼­ºêÄõ¸® 󸮿¡¼­ ref ŸÀÔ´ë½Å »ç¿ëµÈ´Ù.

      value
      IN (SELECT primary_key FROM single_table WHERE some_expr)

      unique_subquery ´Â ¼º´ÉÇâ»óÀ» À§ÇØ ¼­ºêÄõ¸®¸¦ ´Ü¼ø index °Ë»ö ÇÔ¼ö·Î ´ëüÇÑ´Ù.

    • index_subquery

      unique_subquery ¿Í ¸¶Âù°¡Áö·Î IN ¼­ºêÄõ¸®¸¦ ´ëüÇÑ´Ù. ±×·¯³ª À̰ÍÀº ¾Æ·¡¿Í °°ÀÌ ¼­ºêÄõ¸®¿¡¼­ non-unique À妽º°¡ »ç¿ëµÉ¶§ µ¿ÀÛÇÑ´Ù.

      value
      IN (SELECT key_column FROM single_table WHERE some_expr)

    • range

      À妽º¸¦ »ç¿ëÇÏ¿© ÁÖ¾îÁø ¹üÀ§ ³»ÀÇ Çàµé¸¸ ÃßÃâµÈ´Ù. key Ä÷³Àº »ç¿ëµÈ À妽º¸¦ ³ªÅ¸³»°í key_len ´Â »ç¿ëµÈ °¡Àå ±ä key ºÎºÐÀ» ³ªÅ¸³½´Ù.
      ref Ä÷³Àº ÀÌ Å¸ÀÔÀÇ Á¶Àο¡¼­ NULL ÀÌ´Ù.
      range ŸÀÔÀº Ű Ä÷³ÀÌ »ó¼ö¿Í =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN ¶Ç´Â IN ¿¬»ê¿¡ »ç¿ëµÉ¶§ Àû¿ëµÈ´Ù.

       

      SELECT * FROM tbl_name
      WHERE key_column = 10;
      SELECT * FROM tbl_name
      WHERE key_column BETWEEN 10 and 20;
      SELECT * FROM tbl_name
      WHERE key_column IN (10,20,30);
      SELECT * FROM tbl_name
      WHERE key_part1= 10 AND key_part2 IN (10,20,30);
      
      

       

    • index

      ÀÌ Å¸ÀÔÀº À妽º°¡ ½ºÄµµÈ´Ù´Â°É Á¦¿ÜÇϸé ALL °ú °°´Ù. ÀϹÝÀûÀ¸·Î À妽º ÆÄÀÏÀÌ µ¥ÀÌŸÆÄÀϺ¸´Ù À۱⠶§¹®¿¡ ALL º¸´Ù´Â ºü¸£´Ù.
      MySQL Àº Äõ¸®¿¡¼­ ´ÜÀÏ À妽ºÀÇ ÀϺκÐÀÎ Ä÷³À» »ç¿ëÇÒ¶§ ÀÌ Á¶ÀΟÀÔÀ» Àû¿ëÇÑ´Ù.


    • ALL

      ÀÌÀü Å×À̺í°úÀÇ Á¶ÀÎÀ» À§ÇØ Ç®½ºÄµÀÌ µÈ´Ù. ¸¸¾à (Á¶Àο¡ ¾²ÀÎ) ù¹øÂ° Å×À̺íÀÌ °íÁ¤ÀÌ ¾Æ´Ï¶ó¸é ºñÈ¿À²ÀûÀÌ´Ù, ±×¸®°í ´ëºÎºÐÀÇ °æ¿ì¿¡ ¾ÆÁÖ ´À¸° ¼º´ÉÀ» º¸ÀδÙ. º¸Åë »ó¼ö°ªÀ̳ª »ó¼öÀÎ Ä÷³°ªÀ¸·Î row¸¦ ÃßÃâÇϵµ·Ï À妽º¸¦ Ãß°¡ÇÔÀ¸·Î½á ALL ŸÀÔÀ» ÇÇÇÒ ¼ö ÀÖ´Ù.

 

  • possible_keys

    ÀÌ Ä÷³°ªÀº MySQL ÀÌ ÇØ´ç Å×À̺íÀÇ °Ë»ö¿¡ »ç¿ëÇÒ¼ö ÀÖ´Â À妽ºµéÀ» ³ªÅ¸³½´Ù.
    ÁÖÀÇÇÒ°ÍÀº explain °á°ú¿¡¼­ ³ªÅ¸³­ Å×À̺íµéÀÇ ¼ø¼­¿Í´Â ¹«°üÇÏ´Ù´Â °ÍÀÌ´Ù.
    À̰ÍÀº possible_keys ¿¡ ³ªÅ¸³­ À妽ºµéÀÌ °á°ú¿¡ ³ªÅ¸³­ Å×ÀÌºí ¼ø¼­¿¡¼­ ½ÇÁ¦ »ç¿ëÇÒ ¼ö ¾øÀ»¼öµµ ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
    À̰ªÀÌ NULL À̶ó¸é »ç¿ë°¡´ÉÇÑ À妽º°¡ ¾ø´Ù´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡´Â À妽º¸¦ where ÀýÀ» °í·ÁÇÏ¿© »ç¿ëµÊÁ÷ÇÑ ÀûÀýÇÑ Ä÷³¿¡ À妽º¸¦ Ãß°¡ÇÔÀ¸·Î½á ¼º´ÉÀ» °³¼±ÇÒ ¼ö ÀÖ´Ù. À妽º¸¦ ¼öÁ¤ÇÏ¿´´Ù¸é ´Ù½ÃÇѹø EXPLAIN À» ½ÇÇàÇÏ¿© üũÇ϶ó.
    See Section 13.2.2, ¡°ALTER TABLE Syntax¡±.

    ÇöÀç Å×À̺íÀÇ À妽º¸¦ º¸±â À§Çؼ­´Â SHOW INDEX FROM tbl_name.À» »ç¿ëÇ϶ó.

  • key

    ÀÌ Ä÷³Àº MySQL ÀÌ ½ÇÁ¦ »ç¿ëÇÑ key(index) ¸¦ ³ªÅ¸³½´Ù.
    ¸¸¾à »ç¿ëÇÑ À妽º°¡ ¾ø´Ù¸é NULL °ªÀÏ °ÍÀÌ´Ù. MySQL ÀÌ possible_keys ¿¡ ³ªÅ¸³­ À妽º¸¦ »ç¿ëÇϰųª »ç¿ëÇÏÁö ¾Êµµ·Ï °­Á¦ÇÏ·Á¸é FORCE INDEX, USE INDEX, ȤÀº IGNORE INDEX ¸¦ ÇÔ²² »ç¿ëÇ϶ó.
    See
    Section 13.1.7, ¡°SELECT Syntax¡±.

    MyISAM °ú BDB Å×ÀÌºí¿¡¼­´Â ANALYZE TABLE ÀÌ ¿ÉƼ¸¶ÀÌÀú°¡ ´õ³ªÀº À妽º¸¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï Å×À̺íÀÇ Á¤º¸¸¦ °»½ÅÇÑ´Ù.
    MyISAM ¿¡¼­´Â myisamchk --analyze °¡ °°Àº ±â´ÉÀ» ÇÑ´Ù.
    See
    Section 13.5.2.1, ¡°ANALYZE TABLE Syntax¡± and Section 5.7.2, ¡°Table Maintenance and Crash Recovery¡±.

  • key_len

    ÀÌ Ä÷³Àº MySQL ÀÌ »ç¿ëÇÑ À妽ºÀÇ ±æÀ̸¦ ³ªÅ¸³½´Ù. key Ä÷³°ªÀÌ NULL À̸é À̰ªµµ NULL ÀÌ´Ù.
    key_len °ªÀ¸·Î MySQL ÀÌ ½ÇÁ¦ º¹¼öÄ÷³ ŰÁß ¾ó¸¶³ª ¸¹Àº ºÎºÐÀ» »ç¿ëÇÒ °ÍÀÎÁö ¾Ë ¼ö ÀÖ´Ù.

  • ref

    ÀÌ Ä÷³Àº ÇàÀ» ÃßÃâÇϴµ¥ Ű¿Í ÇÔ²² »ç¿ëµÈ Ä÷³À̳ª »ó¼ö°ªÀ» ³ªÅ¸³½´Ù.

     

  • rows

    ÀÌ °ªÀº Äõ¸® ¼öÇà¿¡¼­ MySQL ÀÌ ¿¹»óÇÏ´Â °Ë»öÇØ¾ßÇÒ Çà¼ö¸¦ ³ªÅ¸³½´Ù.

  • Extra

    ÀÌ Ä÷³Àº MySQL ÀÌ Äõ¸®¸¦ ÇØ¼®ÇÑ Ãß°¡ÀûÀÎ Á¤º¸¸¦ ³ªÅ¸³½´Ù.
    ¾Æ·¡¿Í °°Àº °ªµéÀÌ ³ªÅ¸³¯ ¼ö ÀÖ´Ù.

    • Distinct

      MySQL ÀÌ ¸ÅÄ¡µÇ´Â ùÇàÀ» ã´Â Áï½Ã °Ë»öÀ» Áß´ÜÇÒ °ÍÀÌ´Ù.

    • Not exists

      MySQL ÀÌ LEFT JOIN À» ¼öÇàÇÔ¿¡ ¸ÅÄ¡µÇ´Â ÇÑ ÇàÀ» ãÀ¸¸é ´õÀÌ»ó ¸ÅÄ¡µÇ´Â ÇàÀ» °Ë»öÇÏÁö ¾Ê´Â´Ù.
      ¾Æ·¡¿Í °°Àº °æ¿ì¿¡ ÇØ´çÇÑ´Ù.

       

      SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id
      WHERE t2.id IS NULL;
      
      

      ¿©±â¼­ t2.id ´Â NOT NULL À̰í, À̰æ¿ì MySQL Àº t1 À» ½ºÄµÇÑ ÈÄ t1.id °ªÀ» »ç¿ëÇØ t2 ¸¦ °Ë»öÇÑ´Ù. MySQL ÀÌ t2 ¿¡¼­ ¸ÅÄ¡µÇ´Â ÇàÀ» ãÀ¸¸é t2.id ´Â NULL ÀÌ µÉ ¼ö ¾øÀ¸¹Ç·Î ´õÀÌ»ó ÁøÇàÇÏÁö ¾Ê´Â´Ù. Áï, t1 ÀÇ °¢ Çà¿¡ ´ëÇØ t2 ¿¡¼­ ¸ÅÄ¡µÇ´Â ÇàÀÌ ¸î°³°¡ ÀÖ´øÁö ÇѰ³¸¸ ãÀ¸¸é µÈ´Ù.

       

    • range checked for each record (index map: #)

      MySQL ÀÌ »ç¿ëÇÒ ÁÁÀº À妽º°¡ ¾ø´Ù. ±×·¯³ª ¼±ÇàµÈ Å×À̺íÀÇ Ä÷³°ª¿¡ µû¶ó ¸î¸î À妽º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼±ÇàµÈ Å×À̺íÀÇ °³°³ Çà¿¡ ´ëÇØ MySQL ÀÌ range ³ª index_merge Á¢±Ù¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö üũÇÒ °ÍÀÌ´Ù.
      Àû¿ë°¡´É¼ºÀÇ ÇÙ½ÉÀº Section 7.2.5, ¡°Range Optimization¡± and Section 7.2.6, ¡°Index Merge Optimization¡± ¿¡ ¸ðµç ¼±ÇàµÈ Å×À̺íÀÇ °ªÀÌ ¸íÈ®Çϰųª »ó¼öÀÎ ¶§¸¦ ¿¹¿Ü·Î ÇÏ¿© ±â¼úµÇ¾î ÀÖ´Ù.
      À̰ÍÀº ±×¸® ºü¸£Áø ¾ÊÀ¸³ª À妽º°¡ ¾ø´Â Á¶ÀÎÀÇ °æ¿ìº¸´Ù´Â ºü¸£´Ù.

       

    • Using filesort

      MySQL ÀÌ Á¤·ÄÀ» À§ÇØ Ãß°¡ÀûÀÎ °úÁ¤À» ÇÊ¿ä·ÎÇÑ´Ù. Á¤·Ä°úÁ¤Àº Á¶ÀΟÀÔ¿¡ µû¶ó ¸ðµç ÇàÀ» °Ë»öÇϰí WHERE Àý¿¡ ÀÇÇØ ¸ÅÄ¡µÈ ¸ðµç ÇàµéÀÇ Å°°ªÀ» ÀúÀåÇÑ´Ù. ±×¸®°í ÀúÀåµÈ ۰ªÀ» Á¤·ÄÇÏ¿© ÀçÁ¤·ÄµÈ ¼ø¼­·Î ÇàµéÀ» ÃßÃâÇÑ´Ù.
      See
      Section 7.2.10, ¡°How MySQL Optimizes ORDER BY¡±.

     

    • Using index

      Ä÷³Á¤º¸°¡ ½ÇÁ¦ Å×À̺íÀÌ ¾Æ´Ñ À妽ºÆ®¸®¿¡¼­ ÃßÃâµÈ´Ù. Äõ¸®¿¡¼­ ´ÜÀÏ À妽ºµÈ Ä÷³µé¸¸À» »ç¿ëÇÏ´Â °æ¿ìÀÌ´Ù.

     

    • Using temporary
      MySQL ÀÌ °á°úÀÇ Àç»ç¿ëÀ» À§ÇØ ÀÓ½ÃÅ×À̺íÀ» »ç¿ëÇÑ´Ù. Äõ¸® ³»¿¡ GROUP BY ¿Í ORDER BY ÀýÀÌ °¢±â ´Ù¸¥ Ä÷³À» »ç¿ëÇÒ¶§ ¹ß»ýÇÑ´Ù.

     

    • Using where
      WHERE ÀýÀÌ ´ÙÀ½ Á¶Àο¡ »ç¿ëµÉ ÇàÀ̳ª Ŭ¶óÀÌ¾ðÆ®¿¡°Ô µ¹·ÁÁú ÇàÀ» Á¦ÇÑÇÏ´Â °æ¿ìÀÌ´Ù. Å×À̺íÀÇ ¸ðµç ÇàÀ» °Ë»çÇÒ Àǵµ°¡ ¾Æ´Ï¶ó¸é Extra °ªÀÌ Using where °¡ ¾Æ´Ï°í Á¶ÀΟÀÔÀÌ ALL À̳ª index ¶ó¸é Äõ¸®»ç¿ëÀÌ À߸øµÇ¾ú´Ù.

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

    • Using sort_union(...) , Using union(...) , Using intersect(...)
      À̵éÀº À妽º º´ÇÕ Á¶ÀΟÀÔ¿¡¼­ À妽º ½ºÄµÀÌ º´ÇյǴ ÇüŸ¦ ¸»ÇÑ´Ù.

      See Section 7.2.6, ¡°Index Merge Optimization¡± for more information.

     

    • Using index for group-by

      Å×À̺í Á¢±Ù¹æ½ÄÀº Using index ¿Í °°´Ù. MySQL ÀÌ ½ÇÁ¦ Å×ÀÌºí¿¡ ´ëÇÑ ¾î¶°ÇÑ Ãß°¡ÀûÀÎ µð½ºÅ© Á¢±Ù ¾øÀÌ GROUP BY ³ª DICTINCT Äõ¸®¿¡ »ç¿ëµÈ ¸ðµç Ä÷³¿¡ ´ëÇÑ À妽º¸¦ ã¾ÒÀ½À» ¸»ÇÑ´Ù. Ãß°¡ÀûÀ¸·Î °¢°¢ÀÇ group ¿¡ ´ÜÁö ¸î°³ÀÇ À妽º Ç׸ñ¸¸ÀÌ ÀÐÇôÁöµµ·Ï °¡Àå È¿À²ÀûÀÎ ¹æ½ÄÀ¸·Î À妽º°¡ »ç¿ëµÉ °ÍÀÌ´Ù.
      For details, see
      Section 7.2.11, ¡°How MySQL Optimizes GROUP BY¡±.

EXPLAIN ÀÇ Ãâ·Â³»¿ëÁß rows Ä÷³°ªµéÀ» °öÇØº½À¸·Î½á ¾ó¸¶³ª È¿°úÀûÀÎ join À» ½ÇÇàÇϰí ÀÖ´ÂÁö ¾Ë ¼ö ÀÖ´Ù. ÀÌ °ªÀº MySQL ÀÌ Äõ¸®¼öÇàÁß °Ë»çÇØ¾ßÇÒ Çà¼ö¸¦ ´ë·«ÀûÀ¸·Î ¾Ë·ÁÁØ´Ù. ¸¸¾à max_join_size ½Ã½ºÅÛ º¯¼ö°ªÀ» ¼³Á¤ÇÏ¿´´Ù¸é ÀÌ °ªÀº ¶ÇÇÑ ¿©·¯Å×À̺íÀ» »ç¿ëÇÏ´Â select Áß ¾î´À°ÍÀ» ¸ÕÀú ½ÇÇàÇÒÁö ÆÇ´ÜÇϴµ¥ »ç¿ëµÈ´Ù.
See
Section 7.5.2, ¡°Tuning Server Parameters¡±.

 

´ÙÀ½ ¿¹´Â ´ÙÁßÅ×À̺í Á¶ÀÎÀÌ EXPLAIN Á¤º¸¸¦ ÅëÇØ Á¡Â÷ÀûÀ¸·Î °³¼±µÇ´Â °úÁ¤À» º¸¿©ÁØ´Ù. ¸¸¾à ¾Æ·¡¿Í °°Àº select ¹®À» EXPLAIN À¸·Î °³¼±ÇÑ´Ù¸é :

EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,
            tt.ProjectReference, tt.EstimatedShipDate,
            tt.ActualShipDate, tt.ClientID,
            tt.ServiceCodes, tt.RepetitiveID,
            tt.CurrentProcess, tt.CurrentDPPerson,
            tt.RecordVolume, tt.DPPrinted, et.COUNTRY,
            et_1.COUNTRY, do.CUSTNAME
        FROM tt, et, et AS et_1, do
        WHERE tt.SubmitTime IS NULL
            AND tt.ActualPC = et.EMPLOYID
            AND tt.AssignedPC = et_1.EMPLOYID
            AND tt.ClientID = do.CUSTNMBR;

ÀÌ ¿¹¿¡¼­ ¾Æ·¡¿Í °°Àº °¡Á¤ÀÌ »ç¿ëµÇ¾ú´Ù.:

  • The columns being compared have been declared as follows:

    Table Column Column Type
    tt ActualPC CHAR(10)
    tt AssignedPC CHAR(10)
    tt ClientID CHAR(10)
    et EMPLOYID CHAR(15)
    do CUSTNMBR CHAR(15)
  • The tables have the following indexes:

    Table Index
    tt ActualPC
    tt AssignedPC
    tt ClientID
    et EMPLOYID (primary key)
    do CUSTNMBR (primary key)
  • The tt.ActualPC values are not evenly distributed.

¸ÕÀú, °³¼±µÇ±â ÀüÀÇ EXPLAIN Àº ´ÙÀ½°ú °°Àº Á¤º¸¸¦ º¸¿©ÁØ´Ù.:

table type possible_keys key  key_len ref  rows  Extra
et    ALL  PRIMARY       NULL NULL    NULL 74
do    ALL  PRIMARY       NULL NULL    NULL 2135
et_1  ALL  PRIMARY       NULL NULL    NULL 74
tt    ALL  AssignedPC,   NULL NULL    NULL 3872
           ClientID,
           ActualPC
      range checked for each record (key map: 35)


°¢ Å×À̺íÀÇ type ÀÌ ALL À» ³ªÅ¸³»¹Ç·Î, MySQL ÀÌ ¸ðµç Å×À̺íÀÇ Ä«Æ¼¼Ç°ö(Cartesian product) ¸¦ »ý¼ºÇÑ´Ù´Â °ÍÀ» ³ªÅ¸³½´Ù.
°¢ Å×À̺íÀÇ ÇàÀÇ Á¶ÇÕÀÌ ¸ðµÎ °Ë»çµÇ¾î¾ß Çϱ⠶§¹®¿¡ À̰ÍÀº ¾ÆÁÖ ¿À·£ ½Ã°£ÀÌ ¼Ò¿äµÉ °ÍÀÌ´Ù.

½ÇÁ¦·Î ÀÌ °á°ú´Â 74 * 2135 * 74 * 3872 = 45,268,558,720 Çà¿¡ ´ÞÇÑ´Ù.
¸¸¾à Å×À̺íÀÌ ´õ Å©´Ù¸é ¾ó¸¶³ª ¼Ò¿äµÉÁö »ó»óÇÒ ¼öµµ ¾øÀ» °ÍÀÌ´Ù.

¿©±â¼­ ¿ì¼±ÀûÀÎ ¹®Á¦´Â MySQL Àº °°Àº ŸÀÔÀ¸·Î ¼±¾ðµÈ Ä÷³ÀÇ À妽º¸¦ ´õ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. (ISAM Å×ÀÌºí¿¡¼­´Â °°Àº ŸÀÔÀ¸·Î ¼±¾ðµÇÁö ¾ÊÀº À妽º´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.) ¿©±â¿¡¼­ VARCHAR °ú CHAR Àº ±æÀ̰¡ ´Ù¸£Áö ¾Ê´Ù¸é °°Àº ŸÀÔÀÌ´Ù.
tt.ActualPC ´Â CHAR(10) À̰í et.EMPLOYID ´Â CHAR(15) ·Î ¼±¾ðµÇ¾î ÀÖÀ¸¹Ç·Î ±æÀÌÀÇ ºÒÀÏÄ¡°¡ ¹ß»ýÇÑ´Ù.

ÀÌ·¯ÇÑ Ä÷³ ±æÀÌÀÇ ºÒÀÏÄ¡ ¹®Á¦ÀÇ ÇØ°áÀ» À§ÇØ ALTER TABLE À» »ç¿ëÇÏ¿© ActualPC Ä÷³À» 10 ±ÛÀÚ¿¡¼­ 15 ±ÛÀÚ·Î º¯°æÇÏÀÚ (±æÀ̸¦ ´Ã¸®´Â°ÍÀº µ¥ÀÌŸ ¼Õ½ÇÀÌ ¾ø´Ù.)

 

mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);

ÀÌÁ¦ tt.ActualPC ¿Í et.EMPLYID ´Â ¸ðµÎ VARCHAR(15) ÀÌ´Ù. ´Ù½Ã EXPLAIN À» ½ÇÇàÇØº¸¸é ´ÙÀ½ °á°ú¿Í °°´Ù.

 

table type   possible_keys key     key_len ref         rows    Extra
tt    ALL    AssignedPC,   NULL    NULL    NULL        3872    Using
             ClientID,                                         where
             ActualPC
do    ALL    PRIMARY       NULL    NULL    NULL        2135
      range checked for each record (key map: 1)
et_1  ALL    PRIMARY       NULL    NULL    NULL        74
      range checked for each record (key map: 1)
et    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC 1

ÈξÀ ÁÁ¾ÆÁ³Áö¸¸ ¾ÆÁ÷ ¿Ïº®ÇÏÁö ¾Ê´Ù. ÇàÀÇ °öÀº ÀÌÁ¦ 74 ¸¸Å­ ÁÙ¾ú´Ù.

ÀÌ Äõ¸®´Â ÀÌÁ¦ ¸îÃʸ¸¿¡ ½ÇÇàµÉ °ÍÀÌ´Ù.

µÎ¹øÂ° ÀÛ¾÷Àº tt.AssignedPC = et_1.EMPLYID ¿Í tt.ClientID = do.CUSTNMBR ¿¡¼­ÀÇ Ä÷³±æÀÌÀÇ ºÒÀÏÄ¡¸¦ ¼öÁ¤ÇÏ´Â °ÍÀÌ´Ù.

 

mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),
    ->                MODIFY ClientID   VARCHAR(15);

ÀÌÁ¦ EXPLAIN Àº ´ÙÀ½°ú °°Àº °á°ú¸¦ º¸¿©ÁØ´Ù.

table type   possible_keys key      key_len ref           rows Extra
et    ALL    PRIMARY       NULL     NULL    NULL          74
tt    ref    AssignedPC,   ActualPC 15      et.EMPLOYID   52   Using
             ClientID,                                         where
             ActualPC
et_1  eq_ref PRIMARY       PRIMARY  15      tt.AssignedPC 1
do    eq_ref PRIMARY       PRIMARY  15      tt.ClientID   1

À̰ÍÀº ÀÌÁ¦ °ÅÀÇ ÃÖÀûÀÇ °á°ú°¡ µÈ °Í °°´Ù.

³²¾ÆÀÖ´Â ¹®Á¦´Â MySQL ÀÌ ±âº»À¸·Î tt.ActualPC Ä÷³ÀÇ °ªÀÌ ±ÕµîÇÏ°Ô ºÐÆ÷µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÑ´Ù´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ tt Å×À̺íÀº ½ÇÁ¦·Î ±×·¸Áö ¾Ê´Ù.

´ÙÇàÈ÷µµ MySQL ÀÌ Å° ºÐÆ÷¸¦ °Ë»çÇϵµ·Ï Çϴ°ÍÀº ¸Å¿ì ½±´Ù.

mysql> ANALYZE TABLE tt;

ÀÌÁ¦ ¿Ïº®ÇÑ Á¶ÀÎÀÌ µÇ¾ú´Ù. EXPLAIN °á°ú´Â ´ÙÀ½°ú °°´Ù.

table type   possible_keys key     key_len ref           rows Extra
tt    ALL    AssignedPC    NULL    NULL    NULL          3872 Using
             ClientID,                                        where
             ActualPC
et    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC   1
et_1  eq_ref PRIMARY       PRIMARY 15      tt.AssignedPC 1
do    eq_ref PRIMARY       PRIMARY 15      tt.ClientID   1

EXPLAIN °á°úÀÇ rows Ä÷³°ªÀÌ ³ªÅ¸³»´Â MySQL ÃÖÀûÈ­¿¡ ÀÇÇØ ¿¹ÃøµÈ Çà¼ö¿¡ ÁÖ¸ñÇ϶ó.

³ªÅ¸³­ ¼ýÀÚ°¡ ½ÇÁ¦ Çà¼ö¿¡ ±ÙÁ¢ÇÑÁö Ã¼Å©ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é STRAIGHT_JOIN ¸¦ »ç¿ë°í FROM Àý¿¡¼­ Å×À̺íÀÇ ¼ø¼­¸¦ º¯°æÇÔÀ¸·Î½á ´õ ³ªÀº ¼º´ÉÀ» ¾òÀ» ¼ö ÀÖ´Ù.

 

[Top]
No.
Á¦¸ñ
ÀÛ¼ºÀÚ
ÀÛ¼ºÀÏ
Á¶È¸
24241mysql upgrade -- µÎ¹øÂ°(DBÀÌÀü) [1]
À̰æÈ¯
2005-03-02
7821
24240mysql upgrade -- ù¹øÂ°(ÁغñÀÛ¾÷)
À̰æÈ¯
2005-02-28
8384
242314.0 ¿¡ ¸ÅÄ¡µÇ´Â 4.1 ±ÛÀڼ [1]
À̰æÈ¯
2005-08-12
6372
24199MySQL - Explain Á¤º¸º¸´Â¹ý
À̰æÈ¯
2005-04-06
11710
239194.1 ÀÌÀü ¹öÀü¿¡¼­ÀÇ Çѱ۰˻ö ¹®Á¦ [1]
À̰æÈ¯
2005-06-13
5131
23512About SAPDB
Á¤ÀçÀÍ
2002-10-02
6396
23511SAP DB Goes Open Source
Á¤ÀçÀÍ
2002-08-09
4301
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2008 DSN, All rights reserved.
ÀÛ¾÷½Ã°£: 0.549ÃÊ, À̰÷ ¼­ºñ½º´Â
	PostgreSQL v8.4.2·Î ÀڷḦ °ü¸®ÇÕ´Ï´Ù