MySQL 字首索引

2021-10-24 23:57:20 字數 2471 閱讀 2246

使用 字串列的索引規範中的語法,您可以建立僅使用列首字元的索引 。以這種方式僅索引列值的字首可以使索引檔案小得多。為a 或 column 編制索引時 , 必須為索引指定字首長度。例如:col_name(n)nblobtext

複製**

create table test (blob_col blob, index(blob_col(10)));
字首最長可以為1000個位元組(innodb表中為767個位元組 ,除非已 innodb_large_prefix設定)。

注意字首限制以位元組為單位,而在字首長度create table, alter table和 create index語句被解釋為非二進位制串型別的字元數(char, varchar, text對於二進位制串型別),並且位元組數(binary, varbinary, blob)。為使用多位元組字符集的非二進位制字串列指定字首長度時,請考慮到這一點。

如果搜尋詞超過索引字首長度,則使用索引排除不匹配的行,然後檢查其餘行是否可能匹配。

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

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

原則: 降低重複的索引值

例如現在有乙個地區表

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萬條測試資料

insert into x_test(x_name,x_time) select concat(rand()*3300102,x_name),x_time from x_test where id < 30000;

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

複製**

select * from x_test where x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';
2.新增字首索引 ( 以第一位字元建立字首索引 )

複製**

alter table x_test add index(x_name(1))
再次查詢相同sql語句

複製**

select * from x_test where x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';
3.重新建立字首索引 這次以前4位字元來建立

複製**

alter table x_test add index(x_name(4));
再次查詢相同sql語句

複製**

select * from x_test where x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';
4.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 字首索引

檢視出現頻率 select count as cnt,city from sakila.city demo group by city order by cnt desc limit 10 1.select count distinct city count from sakila.city dem...

mysql 字首索引 語法 MySQL 字首索引

索引字首 使用 字串列的索引規範中的語法,您可以建立僅使用列首字元的索引 以這種方式僅索引列值的字首可以使索引檔案小得多。為a 或 column 編制索引時 必須為索引指定字首長度。例如 col name n nblobtext create table test blob col blob,ind...

mysql 字首索引 語法 mysql字首索引

應用場景 資料庫裡有個位址 address 字段,型別為varchar 100 業務決定了要經常根據address來進行查詢。確定選擇性 sql select count distinct address count as selectivity from info selectivity 0.87...