在開發中,我們知道大多數應用的瓶頸在於sql語句的執行時耗,在這裡並不討論sql語句的安全,僅僅討論高效能sql語句,而與高效能sql語句緊密相連的就是傳說中的----索引。
索引--一種工作在儲存引擎端的用於快速找到記錄的一種資料結構。
mysql使用索引的方式是:先找到索引的值,再根據索引的值找到資料行。
索引之b-tree索引
b-tree索引通常意味著所有的值都是按順序儲存的,每個葉子節點到根的距離相同。圖示:
b-tree索引能夠快速的訪問資料,因為儲存引擎不需要進行全表掃瞄來獲得資料,理論上b-tree的搜尋時間複雜度不超過o(㏒2(m))。
表:tbprofitshop
字段數:15
記錄數:20w
關於b-tree索引的一些限制:
⑴.如果不是按照索引的最左字首索引,則無法使用索引。主索引:id,普通索引:fdphone
如:
而這樣則會使用索引:
⑵.不能跳過索引中的列。主索引:id,聯合索引:(fdphone,fdcreate),如:
此處跳過fdphone而直接利用fdcreate,查詢則無法使用索引。
⑶.如果查詢中有某列的範圍查詢,則其右邊所有列都無法使用索引優化查詢。主索引:id,聯合索引:(fdphone,fdcreate)。如:
注:在開發中,經常看見數字型別的字串,然後大火就直接使用數字型別了。資料應與字段型別匹配,在這個例子中fdphone是字元型別,我們以數字型別使用看看如何:
再以字串型別來看看是怎樣的:
all:在索引構建中,索引構建的順序似乎很重要,它往往是索引高效與否的關鍵所在。
高效能mysql(一) 建立高效能索引
單列索引和多列索引 單列索引 多個單列索引的選擇問題 多個or條件 多個單列的效能往往效能很低,盡量建立高效的多列索引。多列索引 選擇合適的索引順序 避免範圍條件 在where子句中,in是有效的,範圍條件會導致後面的索引無效!在order by中,範圍條件和in都會導致無法按照索引排序!按照索引順...
MySQL資料高效能索引
索引 類似資料的目錄,mysql儲存引擎使用類似方式進行查詢,先去索引找到對應的值,然後根據匹配的索引找到對應的資料行 索引對效能的影響 大大減少伺服器需要掃瞄的資料量。比如我們資料表1000條資料。我們只需要根據條件查詢其中的一條,我們針對這一列建立乙個索引,我們只需要掃瞄著一條就可以了。如果不建...
mysql高效能索引設計
索引是儲存引擎用於快速找到記錄的一種資料結構,這是索引的基本功能。可以把資料庫的理解成一本書,而索引就是這本書的索引 每個章節在第幾頁 如果你知道你想查詢的章節名稱,就可以快速的通過索引找到這一章索引的頁數,而在資料庫中也類似,儲存引擎會先在索引中找到對應的值 主鍵或者實體地址,不同的儲存引擎儲存的...