《高效能MySQL》筆記 索引的優點

2021-08-15 18:37:55 字數 855 閱讀 2260

索引可以讓伺服器快速定位到表的指定位置。但是這並不是索引的唯一作用,到目前為止可以看到,根據建立索引的資料結構不同,索引也有一些其他的附加作用。

最常見的b-tree索引,按照順序儲存資料,所以mysql可以用來做order by和group by操作。因為資料是有序的,所以b-tree也就會將相關的列值都儲存在一起。最後,因為索引中儲存了實際的列值,所以某些查詢只使用索引就能夠完成全部查詢。據此特性,總結下來索引有如下三個優點:

1、 索引大大減少了伺服器需要掃瞄的資料量。

2、 索引可以幫助伺服器避免排序和臨時表。

3、 索引可以將隨機i/o變為順序i/o。

如何評價乙個索引是否適合某個查詢的「三星系統」(three-star system):索引將相關的記錄放到一起則獲得一星;如果索引中的資料順序和查詢中的排序一致則獲得二星;如果索引中的列包含了查詢中需要的全部列則獲得「三星」。後面我們會介紹這些原則。

索引並不總是最好的工具。總的來說,只有當索引幫助儲存引擎快速找到記錄帶來的好處大於其帶來的額外工作時,索引才是有效的。對於非常小的表,大部分情況下簡單的全表掃瞄更高效。對於中到大型的表,索引就非常有效。但對於特大型的表,建立和使用索引的代價將隨之增長。這種情況下,則需要一種技術可以直接區分出查詢需要的一組資料,而不是一條記錄一條記錄地匹配。例如可以使用分割槽技術。

如果表的數量特別多,可以建立乙個元資料資訊表,用來查詢需要用到的某些特性。例如執行那些需要聚合多個應用分布在多個表的資料的查詢,則需要記錄「哪個使用者的資訊儲存在哪個表中」的元資料,這樣在查詢時就可以直接忽略那些不包含指定使用者資訊的表。對於大型系統,這是乙個常用的技巧。事實上,infobright就是使用類似的實現。對於tb級別的資料,定位單條記錄的意義不大,所以經常會用塊級別元資料技術來替代索引。

mysql高效能索引 mysql高效能索引( )

在開發中,我們知道大多數應用的瓶頸在於sql語句的執行時耗,在這裡並不討論sql語句的安全,僅僅討論高效能sql語句,而與高效能sql語句緊密相連的就是傳說中的 索引。索引 一種工作在儲存引擎端的用於快速找到記錄的一種資料結構。mysql使用索引的方式是 先找到索引的值,再根據索引的值找到資料行。索...

建立高效能索引 《高效能Mysql》筆記2

crate table people last name varchar 50 not null,first name varchar 50 not null,dob date not null,gender enum m f not null,key last name,first name,do...

《高效能MySQL》筆記 字首索引

有時候需要索引很長的字元列,這會讓索引變得很大且慢。乙個方法使用偽雜湊索引,另外還可以是字首索引 字首索引 可以大大節約索引空間,從而提高索引效率。但會降低索引的選擇性 基數 1 計算不同字首長度的選擇性 如果繼續增加字首長度,選擇性提公升的幅度已經很小就不需在加 2 建立字首索引 alter ta...