使用場(chǎng)景
有時(shí)候需要索引$\color{red}{很長(zhǎng)的字符}$
(例如BLOB,TEXT,或者很長(zhǎng)的VARCHAR)品洛,這樣會(huì)使得索引又大又慢桥状。
解決
- 使用字符串的前幾個(gè)字符作為索引(即前綴索引)。
- 選擇足夠長(zhǎng)的前綴以保證較高的選擇性,同時(shí)又不能太長(zhǎng)(造成空間浪費(fèi))挽霉。
索引的選擇性
索引的選擇性是指不重復(fù)的索引值(也稱為基數(shù)侠坎,cardinality)和數(shù)據(jù)表的記錄總數(shù)的比值裙盾,范圍從1/#T到1之間番官。索引的選擇性越高則查詢效率越高徘熔,因?yàn)檫x擇性高的索引可以讓MySQL在查找時(shí)過(guò)濾掉更多的行酷师。唯一索引的選擇性是1山孔,這是最好的索引選擇性台颠,性能也是最好的。
count(distinct left(city,4))/count(*) as sel4
-- 查詢索引的長(zhǎng)度
select length(old_kefuid) from xw_user_applyloan LIMIT 1;
-- 查詢索引長(zhǎng)度是5的時(shí)候的數(shù)據(jù)重復(fù)次數(shù)
select left(old_kefuid,4) as 左邊5位2長(zhǎng)度,count(*) as 總數(shù) from xw_user_applyloan GROUP by left(old_kefuid,4);
-- 設(shè)置前綴索引
alter table xw_user_applyloan add index uname( old_kefuid(4) )
前綴索引注意事項(xiàng)
- MySQL中無(wú)法使用前綴索引進(jìn)行ORDER BY和GROUP BY,也無(wú)法用來(lái)進(jìn)行覆蓋掃描
擴(kuò)展
《高性能MySQL》讀書(shū)筆記(三)------ 前綴索引的長(zhǎng)度測(cè)試
查詢Mysql數(shù)據(jù)庫(kù)版本
1.使用 MySQL 函數(shù):select version();
2.使用 MySQL 變量:show variables like ‘%version%’