MySQL的字首索引你是如何使用的

2022-07-26 01:57:14 字數 2254 閱讀 3269

靈魂3連問:

字首索引也叫區域性索引,比如給身份證的前 10 位新增索引,類似這種給某列部分資訊新增索引的方式叫做字首索引。

字首索引能有效減小索引檔案的大小,讓每個索引頁可以儲存更多的索引值,從而提高了索引查詢的速度。但字首索引也有它的缺點,不能在 order by 或者 group by 中觸發字首索引,也不能把它們用於覆蓋索引。

當字串本身可能比較長,而且前幾個字元就開始不相同,適合使用字首索引;相反情況下不適合使用字首索引,比如,整個欄位的長度為 20,索引選擇性為 0.9,而我們對前 10 個字元建立字首索引其選擇性也只有 0.5,那麼我們需要繼續加大字首字元的長度,但是這個時候字首索引的優勢已經不明顯,就沒有建立字首索引的必要了。

舉例說明:

當要索引的列字元很多時 索引則會很大且變慢

( 可以只索引列開始的部分字串 節約索引空間 從而提高索引效率 )

原則:降低重複的索引值

例如現在有乙個地區表

area

gdpcode

chinashanghai

100aaa

chinadalian

200bbb

usanewyork

300ccc

chinafuxin

400ddd

chinabeijing

500eee

發現 area 字段很多都是以 china 開頭的

那麼如果以前1-5位字元做字首索引就會出現大量索引值重複的情況

索引值重複性越低 查詢效率也就越高

字首索引測試

// 建立乙個測試表

create table `x_test` (

`id` int(11) unsigned not null auto_increment,

`x_name` varchar(255) not null,

`x_time` int(10) not null,

primary key (`id`)

) engine=innodb auto_increment=4145025 default charset=utf8mb4

// 新增200萬條測試資料

200萬 測試資料

在無任何索引的情況下隨便查詢一條

select * from x_test where x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';

新增字首索引 ( 以第一位字元建立字首索引 )

alter table x_test add index(x_name(1))

再次查詢相同sql語句

select * from x_test where x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';

重新建立字首索引 這次以前4位字元來建立

alter table x_test add index(x_name(4));

再次查詢相同sql語句

select * from x_test where x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';

200萬條資料都以數字開頭 而0-9排列組合7位則可達到千萬種組合

也就是以前7位來做索引則不會出現重複索引值的情況了

alter table x_test add index(x_name(7));

再次查詢相同sql語句

select * from x_test where x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';

mysql如何使用索引 MySQL是如何使用索引的

閒扯 很多時候我們面對很慢的查詢的時候會一籌莫展,這個時候大部分人都會很自然的想到建索引這條路。事實上索引確實是個很好的優化方式,乙個良好的索引能夠提公升不止一倍的效率,還能帶來併發能力的提公升。但是索引也不是萬能的,不然的話我大可以給一張表的所有列上都加上索引,但是基本上所有的dba都會有一條認知...

敏捷是如何使你跑得更快?

對於為何採用敏捷軟體開發這個問題,企業經常提到的原因之一是希望能夠更快地交付軟體。研究表明敏捷專案能夠進行地更快,例如 敏捷專案的成功證據 一文中描述的哥倫布市敏捷工作效率基準專案。u0026 xd n 在博文 誰說敏捷專案不能更快一些 中,matthew heusser分享了他在agile tes...

0929mysql字首索引如何找到合適的位數

字首索引,是指對於varchar text blob型別的字段建立索引時一般都會選擇前n個字元作為索引。索引很長的字元列,會讓索引變得大且慢。索引開始的部分字元,這樣可以大大節約索引空間,從而提高索引效率,但這樣也會降低索引的選擇性。索引的選擇性是指不重複的索引值 也稱為基數,cardinality...