MySQL索引筆記

2021-09-11 21:59:38 字數 2785 閱讀 1079

假設你在表的state、city和zip資料列上建立了復合索引。索引中的資料行按照state/city/zip次序排列,

因此它們也會自動地按照state/city和state次序排列。這意味著,即使你在查詢中只指定了state值,

或者指定state和city值,mysql也可以使用這個索引。因此,這個索引可以被用於搜尋如下所示的資料列組合:

state, city, zip

state, city

state

mysql不能利用這個索引來搜尋~沒有包含在最左字首的內容~。例如,如果你按照city或zip來搜尋,

就不會使用到這個索引。如果你搜尋給定的state和具體的zip**(索引的1和3列),

該索引也是不能用於這種組合值的,儘管mysql可以利用索引來查詢匹配的state從而縮小搜尋的範圍。

如果你考慮給已經索引過的表新增索引,那麼就要考慮你將增加的索引是否是已有的多列索引的最左字首。

如果是這樣的,不用增加索引,因為已經有了(例如,如果你在state、city和zip上建立了索引,那麼沒有必要再增加state的索引)。

複製**

假設表persons有如下資訊段

create

table

`persons` (

`id`

int(10) unsigned

notnull auto_increment,

`uuid`

varchar(60) not

null

comment

'uuid',

`unitcode`

varchar(30) not

null

comment

'單位編碼',

`code1`

varchar(36) default

null

comment

'員工號/編碼',

`name1`

varchar(50) default

null

comment

'姓名',

/** ...

*/`s_date`

date

default

null

comment

'員工檔案建檔日期',

`logout`

smallint(6) default

null

comment

'在職狀態',

/** ...

*/`deleted_at`

timestamp

null

default

null,

primary key (`id`),

unique

key`persons_uuid_unique` (`uuid`),

key`persons_name1_unitcode_index` (`name1`,`unitcode`),

/** ...

*/key`persons_name1_unitcode_logout_deleted_at_index` (`name1`, `unitcode`,`logout`,`deleted_at`) using btree

) engine=innodb auto_increment=34199

default

charset=utf8mb4 collate=utf8mb4_0900_ai_ci;

複製**

有如下查詢語句

-- sql1

desc select * from

`persons`

where

`unitcode`

like

'000%'

and`logout` = '0'

and`persons`.`deleted_at`

isnull

order

by`name1`

limit

15offset

0-- sql2

desc

select

`unitcode`, `name1`

from

`persons`

where

`unitcode`

like

'000%'

and`logout` = '0'

and`persons`.`deleted_at`

isnull

order

by`name1`

limit

15offset

0複製**

上面的sql1中不會用到索引,sql2中才用到索引

要使sql1中用到索引必須將sql查詢語句where中沒有出現,只是在order by**現的列名放到索引的最後面,將 索引persons_name1_unitcode_logout_deleted_at_index改為以下即可。

/*

* ...

*/key `persons_name1_unitcode_logout_deleted_at_index` (`unitcode`,`logout`,`deleted_at`, `name1`) using btree

複製**

mysql索引 使用筆記 mysql索引筆記

mysql索引 一 索引的優缺點 優點 1.通過建立唯一索引,可以保證資料庫表中每一行的唯一性。2.可以大大加快查詢速度,這是建立索引的最主要原因 4.在使用分組和排序子句進行資料查詢時,也可以顯著減少查詢中分組和查詢的時間 缺點 1.建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也...

mysql索引筆記

型別 雜湊 雜湊演算法 原理 雜湊演算法 將各個資料重組成編號,查詢時將資料編號直接找到查詢到的值 優勢 一次性找到該值 劣勢 資料連續性差 中 編號 005 國 編號 006 人 編號 007 民 編號 008 如果查詢 中民 tree 二叉樹演算法 log2n 原理 當我查詢3時,此時4比3大走...

MySql筆記(索引)

索引能優化資料庫查詢效能,但索引也有代價 挑選索引應符合以下原則 為用於搜尋 排序或分組的列建立索引,爾對於用作輸出顯示的列 select的結果 則不用。也就是說,最好是那些出現在where子句,連線子句,或者出現在order by或group by子句中的列 考慮資料列基數 列的基數是指列中非重複...