MySQL Like 에 대한 인덱스 explain

6 minute read

  • 결론
  • 문자열 index 를 설정 한 뒤
  • like ‘AAA%’ : 인덱스 사용함
  • like ‘%AAA%’ : 인덱스 사용 안함
  • like ‘%AAA’ : 인덱스 사용 안함

인덱스 구조

MySQL 5.0.75
SQL 질의: show indexes from mh_bbs_mine_data; 
행(레코드): 8

<thead>&lt;tr&gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Table&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Non_unique&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Key_name&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Seq_in_index&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Column_name&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Collation&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Cardinality&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Sub_part&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Packed&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Null&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Index_type&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Comment&amp;lt;/th&amp;gt;&lt;/tr&gt;</thead><tbody>&lt;tr class="odd"&gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;mh_bbs_mine_data&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;IDX_for_caleandar&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;b_etc_0&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;A&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1184&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;10&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;YES&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;BTREE&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt; &amp;lt;/td&amp;gt;&lt;/tr&gt;&lt;tr class="even"&gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;mh_bbs_mine_data&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;IDX_for_caleandar&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;b_etc_1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;A&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1184&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;10&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;YES&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;BTREE&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt; &amp;lt;/td&amp;gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;mh_bbs_mine_data&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;IDX_b_idx&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;b_id&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;A&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;6&amp;lt;/td&amp;gt;&amp;lt;td align="right" class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;BTREE&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt; &amp;lt;/td&amp;gt;&lt;/tr&gt;&lt;tr class="even"&gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;mh_bbs_mine_data&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;IDX_b_idx&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;b_idx&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;A&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1184&amp;lt;/td&amp;gt;&amp;lt;td align="right" class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;BTREE&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt; &amp;lt;/td&amp;gt;&lt;/tr&gt;</tbody>

MySQL 5.0.75
SQL 질의: explain select * from mh_bbs_mine_data where b_etc_0 like ‘%08%’ **; 
**행(레코드):
 1

<thead>&lt;tr&gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;id&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;select_type&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;table&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;type&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;possible_keys&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;key&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;key_len&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;ref&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;rows&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Extra&amp;lt;/th&amp;gt;&lt;/tr&gt;</thead><tbody>&lt;tr class="odd"&gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;SIMPLE&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;mh_bbs_mine_data&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;ALL&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1184&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;Using where&amp;lt;/td&amp;gt;&lt;/tr&gt;</tbody>

MySQL 5.0.75
SQL 질의: explain select * from mh_bbs_mine_data where b_etc_0 like ‘08%’ ; 
행(레코드): 1

<thead>&lt;tr&gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;id&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;select_type&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;table&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;type&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;possible_keys&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;key&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;key_len&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;ref&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;rows&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Extra&amp;lt;/th&amp;gt;&lt;/tr&gt;</thead><tbody>&lt;tr class="odd"&gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;SIMPLE&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;mh_bbs_mine_data&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;range&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;IDX_for_caleandar&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;IDX_for_caleandar&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;33&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;Using where&amp;lt;/td&amp;gt;&lt;/tr&gt;</tbody>

MySQL 5.0.75
SQL 질의: explain select * from mh_bbs_mine_data where b_etc_0 like ‘%08’ ; 
행(레코드): 1

<thead>&lt;tr&gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;id&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;select_type&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;table&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;type&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;possible_keys&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;key&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;key_len&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;ref&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;rows&amp;lt;/th&amp;gt;&amp;lt;th style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; background-color: rgb(229, 229, 229);"&amp;gt;Extra&amp;lt;/th&amp;gt;&lt;/tr&gt;</thead><tbody>&lt;tr class="odd"&gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;SIMPLE&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;mh_bbs_mine_data&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;ALL&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;*NULL*&amp;lt;/td&amp;gt;&amp;lt;td align="right" class=" nowrap" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em; white-space: nowrap;"&amp;gt;1184&amp;lt;/td&amp;gt;&amp;lt;td class="" style="border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;"&amp;gt;Using where&amp;lt;/td&amp;gt;&lt;/tr&gt;</tbody>

MySQL 5.5.42 에서도 별반 다르지 않은 결과.


🔗original-link

Updated: