天天看點

MySQL Study之--Index的強制使用和忽略

1、檢視表結構

mysql> show create table emp\G

*************************** 1. row ***************************

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<code>Table: emp</code>

<code>Create Table: CREATE TABLE `emp` (</code>

<code>  </code><code>`empno` </code><code>int</code><code>(</code><code>4</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>

<code>  </code><code>`ENAME` varchar(</code><code>10</code><code>) DEFAULT NULL,</code>

<code>  </code><code>`JOB` varchar(</code><code>9</code><code>) DEFAULT NULL,</code>

<code>  </code><code>`MGR` </code><code>int</code><code>(</code><code>4</code><code>) DEFAULT NULL,</code>

<code>  </code><code>`HIRE` date DEFAULT NULL,</code>

<code>  </code><code>`SAL` </code><code>int</code><code>(</code><code>7</code><code>) DEFAULT NULL,</code>

<code>  </code><code>`COMM` </code><code>int</code><code>(</code><code>7</code><code>) DEFAULT NULL,</code>

<code>  </code><code>`deptno` </code><code>int</code><code>(</code><code>2</code><code>) DEFAULT NULL,</code>

<code>  </code><code>PRIMARY KEY (`empno`),</code>

<code>  </code><code>KEY `deptno` (`deptno`),</code>

<code>  </code><code>CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptNO`)</code>

<code>) ENGINE=InnoDB DEFAULT CHARSET=latin1</code>

<code>1</code> <code>row in set (</code><code>0.00</code> <code>sec)</code>

---在此表中empno 為主鍵,在deptno上建有索引

mysql&gt; select * from emp;

16

17

18

19

<code>+-------+--------+-----------+------+------------+------+------+--------+</code>

<code>| empno | ENAME  | JOB       | MGR  | HIRE       | SAL  | COMM | deptno |</code>

<code>|  </code><code>7369</code> <code>| SMITH  | CLERK     | </code><code>7902</code> <code>| </code><code>1980</code><code>-12</code><code>-17</code> <code>|  </code><code>800</code> <code>| NULL |     </code><code>20</code> <code>|</code>

<code>|  </code><code>7499</code> <code>| ALLEN  | SALESMAN  | </code><code>7698</code> <code>| </code><code>1981</code><code>-02</code><code>-20</code> <code>| </code><code>1600</code> <code>|  </code><code>300</code> <code>|     </code><code>30</code> <code>|</code>

<code>|  </code><code>7521</code> <code>| WARD   | SALESMAN  | </code><code>7698</code> <code>| </code><code>1981</code><code>-02</code><code>-22</code> <code>| </code><code>1250</code> <code>|  </code><code>500</code> <code>|     </code><code>30</code> <code>|</code>

<code>|  </code><code>7566</code> <code>| JONES  | MANAGER   | </code><code>7839</code> <code>| </code><code>1981</code><code>-04</code><code>-02</code> <code>| </code><code>2975</code> <code>| NULL |     </code><code>20</code> <code>|</code>

<code>|  </code><code>7654</code> <code>| MARTIN | SALESMAN  | </code><code>7698</code> <code>| </code><code>1981</code><code>-09</code><code>-28</code> <code>| </code><code>1250</code> <code>| </code><code>1400</code> <code>|     </code><code>30</code> <code>|</code>

<code>|  </code><code>7698</code> <code>| BLAKE  | MANAGER   | </code><code>7839</code> <code>| </code><code>1981</code><code>-05</code><code>-01</code> <code>| </code><code>2850</code> <code>| NULL |     </code><code>30</code> <code>|</code>

<code>|  </code><code>7782</code> <code>| CLARK  | MANAGER   | </code><code>7839</code> <code>| </code><code>1981</code><code>-06</code><code>-09</code> <code>| </code><code>2450</code> <code>| NULL |     </code><code>10</code> <code>|</code>

<code>|  </code><code>7788</code> <code>| SCOTT  | ANALYST   | </code><code>7566</code> <code>| </code><code>1987</code><code>-07</code><code>-13</code> <code>| </code><code>3000</code> <code>| NULL |     </code><code>10</code> <code>|</code>

<code>|  </code><code>7839</code> <code>| KING   | PRESIDENT | NULL | </code><code>1981</code><code>-11</code><code>-17</code> <code>| </code><code>5000</code> <code>| NULL |     </code><code>10</code> <code>|</code>

<code>|  </code><code>7844</code> <code>| TURNER | SALESMAN  | </code><code>7698</code> <code>| </code><code>1981</code><code>-09</code><code>-08</code> <code>| </code><code>1500</code> <code>|    </code><code>0</code> <code>|     </code><code>30</code> <code>|</code>

<code>|  </code><code>7876</code> <code>| ADAMS  | CLERK     | </code><code>7788</code> <code>| </code><code>1987</code><code>-06</code><code>-13</code> <code>| </code><code>1100</code> <code>| NULL |     </code><code>20</code> <code>|</code>

<code>|  </code><code>7900</code> <code>| JAMES  | CLERK     | </code><code>7698</code> <code>| </code><code>1981</code><code>-12</code><code>-03</code> <code>|  </code><code>950</code> <code>| NULL |     </code><code>30</code> <code>|</code>

<code>|  </code><code>7902</code> <code>| FORD   | ANALYST   | </code><code>7566</code> <code>| </code><code>1981</code><code>-12</code><code>-03</code> <code>| </code><code>3000</code> <code>| NULL |     </code><code>20</code> <code>|</code>

<code>|  </code><code>7934</code> <code>| MILLER | CLERK     | </code><code>7782</code> <code>| </code><code>1982</code><code>-01</code><code>-23</code> <code>| </code><code>1300</code> <code>| NULL |     </code><code>10</code> <code>|</code>

<code>14</code> <code>rows </code><code>in</code> <code>set (</code><code>0.00</code> <code>sec)</code>

1)全表掃描查詢

mysql&gt; explain select * from emp \G

<code>  </code><code>id: </code><code>1</code>

<code>  </code><code>select_type: SIMPLE</code>

<code>        </code><code>table: emp</code>

<code>         </code><code>type: ALL</code>

<code>possible_keys: NULL</code>

<code>          </code><code>key: NULL</code>

<code>      </code><code>key_len: NULL</code>

<code>          </code><code>ref: NULL</code>

<code>         </code><code>rows: </code><code>14</code>

<code>        </code><code>Extra: NULL</code>

<code>1</code> <code>row </code><code>in</code> <code>set (</code><code>0.00</code> <code>sec)</code>

2、通過主鍵查詢

mysql&gt; explain select * from emp where empno=7788\G

<code>        </code><code>id: </code><code>1</code>

<code>         </code><code>type: const</code>

<code>possible_keys: PRIMARY</code>

<code>          </code><code>key: PRIMARY</code>

<code>      </code><code>key_len: </code><code>4</code>

<code>          </code><code>ref: const</code>

<code>         </code><code>rows: </code><code>1</code>

<code>1</code> <code>row </code><code>in</code> <code>set (</code><code>0.02</code> <code>sec)</code>

3)忽略主鍵索引

mysql&gt; explain select * from emp ignore index(pri) where empno=7788\G

<code>      </code><code>id: </code><code>1</code>

<code>        </code><code>Extra: Using </code><code>where</code>

4)強制使用主鍵

mysql&gt; explain select * from emp force index(pri) where empno=7788\G

5)通過索引deptno查詢

mysql&gt; explain select * from emp where deptno=10\G

*************************** 1. row ***************************     

<code>id: </code><code>1</code>

<code>         </code><code>type: ref</code>

<code>possible_keys: deptno</code>

<code>          </code><code>key: deptno</code>

<code>      </code><code>key_len: </code><code>5</code>

<code>         </code><code>rows: </code><code>4</code>

6)忽略索引的使用

mysql&gt; explain select * from emp ignore index(deptno) where deptno=10\G

*************************** 1. row ***************************   

<code>        </code><code>Extra: Using where</code>

7)強制使用索引

mysql&gt; explain select * from emp  force index (deptno) where deptno=10\G

本文轉自 客居天涯 51CTO部落格,原文連結:http://blog.51cto.com/tiany/1726065,如需轉載請自行聯系原作者

繼續閱讀