在學(xué)習(xí)數(shù)據(jù)庫(kù)索引的時(shí)候,我們會(huì)接觸到MySQL的like索引,下面就讓我們來(lái)詳細(xì)了解一下這個(gè)功能。
CREATE TABLE `test_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`(10)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
上述代碼是創(chuàng)建一個(gè)名為test_table的表,主鍵為id,還額外創(chuàng)建了一個(gè)名為idx_name的索引。
SELECT * FROM test_table WHERE name LIKE 'a%';
上述代碼是查詢表test_table中name以a開(kāi)頭的記錄。
實(shí)際上,在進(jìn)行這類(lèi)查詢時(shí),MySQL會(huì)自動(dòng)將查詢語(yǔ)句轉(zhuǎn)換為使用 idx_name 索引的查詢:WHERE name LIKE 'a%'
會(huì)轉(zhuǎn)化為WHERE name LIKE 'a%'
.
需要注意的是,使用like查詢語(yǔ)句時(shí),%只能出現(xiàn)在字符串的結(jié)尾部分,而不能在字符串的開(kāi)頭或中間部分。這也是為什么在表結(jié)構(gòu)中我們用10表示的,因?yàn)槟J(rèn)字符集utf8mb4,一個(gè)中文字符占用4個(gè)字節(jié),所以我們這里用10表示。
在實(shí)際應(yīng)用中,如何使用like索引也是一個(gè)需要注意的問(wèn)題。如果like查詢語(yǔ)句經(jīng)常變換,那么建立like索引就沒(méi)有必要。索引的更新非常消耗資源,頻繁的索引更新會(huì)導(dǎo)致數(shù)據(jù)庫(kù)性能受損。
因此,在使用like查詢語(yǔ)句時(shí),需要考量查詢語(yǔ)句的變換頻率,以及數(shù)據(jù)庫(kù)的性能狀況,來(lái)決定是否建立like索引。