MySQL筆記(索引排序及壓縮索引)

2021-08-25 13:29:44 字數 1246 閱讀 5548

1.使用索引來進行order by

(mark!!!看的筆記困惑,書上著墨不多,以後分析**時細看!!)

只有當索引的順序和order by子句的順序完全一致,並且所有列的排序方向一樣才可以。當聯接查詢時,orderby的必須是第乙個表。

排序查詢的where和order by需要形成索引的最左字首,即總是要包含索引的左邊的列。

例如對於表a(i int,j int ,k int,t int),在i,j,k上建索引

如下:.....where i =.... order by j,k;

.....where i>....order by i,j;

如下則不能使用索引進行排序的查詢

....where i=....order by j desc,k asc;

....where i=....order by j,t....引用不在索引中的列

....where i=....order by k.....不能形成最左字首(隔著j)

....where i>....order by j,k...第一列上有範圍條件

2.壓縮索引

myisam使用字首壓縮來減小索引大小,預設情況下會壓縮字串,也可以壓縮整數

可以使用create table時用pack_keys控制索引壓縮的方式。

pack_keys在mysql手冊中如下描述:

如果您希望索引更小,則把此選項設定為1。這樣做通常使更新速度變慢,同時閱讀速度加快。把選項設定為0可以取消所有的關鍵字壓縮。把此選項設定為default時,儲存引擎只壓縮長的char或varchar列(僅限於myisam)。

如果您不使用pack_keys,則預設操作是只壓縮字串,但不壓縮數字。如果您使用pack_keys=1,則對數字也進行壓縮。

在對二進位制數字關鍵字進行壓縮時,mysql採用字首壓縮:

o 每個關鍵字需要乙個額外的位元組來指示前乙個關鍵字中有多少位元組與下乙個關鍵字相同。

o 指向行的指標以高位位元組優先的順序儲存在關鍵字的後面,用於改進壓縮效果。

這意味著,如果兩個連續行中有許多相同的關鍵字,則後續的「相同」的關鍵字通常只占用兩個位元組(包括指向行的指標)。與此相比,常規情況下,後續的關鍵字占用storage_size_for_key + pointer_size(指標尺寸通常為4)。但是,只有在許多數字相同的情況下,字首壓縮才有好處。如果所有的關鍵字完全不同,並且關鍵字不能含有null值,則每個關鍵字要多使用乙個位元組。(在這種情況中,儲存壓縮後的關鍵字的長度的位元組與用於標記關鍵字是否為null的位元組是同一位元組。

mysql 不排序 MySQL高效索引 覆蓋索引

概念如果索引包含所有滿足查詢需要的資料,則該索引稱為覆蓋索引 covering index 也就是平時所說的不需要回表操作。判斷標準 使用explain,可以通過輸出的extra列來判斷,對於乙個索引覆蓋查詢,顯示為using index,mysql查詢優化器在執行查詢前會決定是否有索引覆蓋查詢 注...

Mysql索引結構與索引原理及hash索引介紹

mysql索引主要包括四種,btree索引 hash索引 full text全文索引 r tree索引,因為作為一名php開發者,並不是專業的dba,在這裡只需要了解第一種開發相關的btree索引。索引的本質 mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料和排序的資料結...

mysql 索引壓縮 MySQL 索引壓縮碎片

mysql 索引簡介 索引也叫 鍵 key 是儲存引擎用於快速找到記錄的一種資料結構。索引對於良好的效能非常關鍵。資料量越來越大的時候,索引的重要性也會體現出來。例如下面的sql select from user where userid 123 如果沒有建立索引,此時查詢會全表掃瞄 如果在user...