轉載於: http://chensh.loxa.edu.tw/php/C_7.php
在 MySQL 中使用 index 時,下列是一些該注意的事:
在 MySQL 裡,將欄位設為 Primary 或 Unique 時,都同時具有 index 的效果。
欲設為 index 的欄位長度是越短越好,這樣在維護 index table 時會快速一些;像 BLOB 與 TEXT 這類巨無霸型的資料型態,雖然在 MySQL 3.23.2 版之後也可以被設為 index 了,但還是少用為妙。
欲設為 index 的欄位長度若是固定的話,會比變動的來得好。例如:同樣被設為 index,char(10) 的欄位,就比 varchar(10) 好。
將多個欄位複合成為一組 index key 的話,要注意先後順序。例如:將「A+B+C」設為 index 時,下列的 SELECT 敘述將會使用到 index:
SELECT * FROM tbl_name WHERE A = val1;
SELECT * FROM tbl_name WHERE A = val1 AND B = val2;
SELECT * FROM tbl_name WHERE A = val1 AND B = val2 AND C = val3;
但像以下這樣的 SELECT 敘述將不會享受到 index 的好處:
SELECT * FROM tbl_name WHERE B = val2;
SELECT * FROM tbl_name WHERE C = val3;
SELECT * FROM tbl_name WHERE B = val2 AND C = val3;
當您使用「LIKE」參數時,若將萬用字元(%)置於關鍵詞後方,可以使用到 index;
select * from tbl_name where key_col LIKE "Patrick%";
若置於關鍵詞前方的話,則 index 不會起作用。
select * from tbl_name where key_col LIKE "%Patrick%";
EXPLAIN
如果想知道每個 SELECT 敘述是否充分運用 index 的話,您可以試試使用「EXPLAIN」。當您 SELECT 敘述句之前加上「EXPLAIN」時,將可以看到 MySQL 對它的處理原則,包括「是否使用 index」等資訊。
[tr] 《score》 SNum SName Score75312 Chen 8075524 Chuang 9575207 Yeh 9275302 Lee 9075101 Chuang 8975303 Ho 9075120 Lin 9275313 Chen 88
《address》 SNum Address75312高雄縣鳳山市五甲二路 424 號 以上方的 score 表為例,我們將其中的「SNum」欄位設為 index key,請看 EXPLAIN 的用法與結果: 【例一】EXPLAIN SELECT * from score WHERE SNum = '75312'; 【例二】EXPLAIN SELECT * from score WHERE SNum LIKE '753%'; 【例三】EXPLAIN SELECT * from score WHERE SName LIKE '%531%'; 【例四】EXPLAIN SELECT * from score WHERE SName = 'Chen'; 【例五】EXPLAIN SELECT * FROM score LEFT JOIN address ON score.SNum = address.SNum WHERE score.SNum = '75312';
我們來看看這些結果代表什麼意思: