今天要探討關於Pattern Matching與索引.
Pattern Matching應用很多,因為我們不只想知道
精確的,也會想要知道某類型的資料到底有多少?
例如除了桜木凛以外,還有沒有桜木花道?
這時候就需要用到Pattern Matching了.
EXPLAIN SELECT *
FROM AVGals
WHERE name LIKE '桜木%'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: AVGals
type: range
possible_keys: name
key: name
key_len: 62
ref: NULL
rows: 1
Extra: Using where
type是range,key是name,代表有使用索引,rows是1,只有1筆.
這樣能夠應用索引的查詢,效率會較好.
那若是要找出中間有"崎"的呢?
EXPLAIN SELECT *
FROM AVGals
WHERE name LIKE '%崎%'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: AVGals
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4
Extra: Using where
type是ALL,key是NULL,rows是4.代表是全表掃描,沒有使用索引.
由上面兩個例子可以知道,使用Pattern Matching要注意的技巧.
當然有些查詢,雖然無法使用索引,但是也是必要的,要視實際情況.
在允許的情況下,盡量讓MySQL能夠使用索引來協助,會有較好的效率.