MySQL字首索引

2021-08-19 14:08:07 字數 2096 閱讀 8484

正確地建立和使用索引是實現高效能查詢的基礎。本文旨在介紹關於長字元列如何高效地使用索引,如果需要可以查閱mysql索引型別了解mysql常用的索引型別。

有時需要在很長的字元列(如blob、text或很長的varchar型別的列)上建立索引,這會造成索引特別大且慢。

為了避免產生大且慢的索引,一種策略是使用mysql索引型別中提到過的模擬雜湊索引,另一種策略就是使用字首索引。

字首索引就是選擇索引列的最左n個字元來建立索引。這樣就大大節約了索引空間,進而提高索引效率。但其缺點就是:mysql無法使用字首索引做order by 、group by 和覆蓋掃瞄。

建立字首索引的關鍵在於選擇足夠長的字首以保證較高的索引選擇性。索引選擇性越高查詢效率就越高,因為選擇性高的索引可以讓mysql在查詢時過濾掉更多的資料行。為方便舉例,建立author表如下:

create

table

`author` (

`id`

int(11) unsigned not

null auto_increment comment '主鍵',

`name`

varchar(32) not

null comment '姓名',

`gender` tinyint(1) not

null comment '性別,0-男,1-女',

`age` tinyint(3) not

null

default

'0' comment '年齡',

`email`

varchar(32) not

null

default

'' comment '郵箱',

`homepage`

varchar(128) not

null

default

'' comment '主頁',

`add_time`

timestamp

notnull

default

current_timestamp comment '新增時間',

`update_time`

timestamp

notnull

default

current_timestamp comment '修改時間',

primary

key (`id`)

) engine=innodb auto_increment=1

default charset=utf8;

// email列建立字首索引

create index idx_author_email on author(email(3));

// 插入5條資料

insert

into

`author` (`name`, `gender`, `age`, `email`) values('xx','0','20','[email protected]');

insert

into

`author` (`name`, `gender`, `age`, `email`) values('yy','1','18','[email protected]');

insert

into

`author` (`name`, `gender`, `age`, `email`) values('zz','0','25','[email protected]');

insert

into

`author` (`name`, `gender`, `age`, `email`) values('xyz123','0','30','[email protected]');

insert

into

`author` (`name`, `gender`, `age`, `email`) values('xyz123','0','120','***@163.com');

根據email執行相關查詢如下:

從執行計畫看,無論是精確查詢或是模糊查詢,都使用了idx_author_email索引。

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...