資料庫索引優化

2021-08-09 10:50:40 字數 2350 閱讀 7360

索引的作用是告訴儲存引擎快速找到我們需要的資料,兩個極端,除了主鍵沒有任何索引,給每乙個列都建立乙個索引,所以索引是在mysql儲存引擎層實現的,而不是在mysql伺服器層實現的,不同的儲存引擎的索引方式是不同的,

mysql支援的索引型別,

b-tree索引是比較常見的,通常所說的索引就是b-tree索引,特點,b-tree以b+樹的結構儲存資料,每個葉子到根部的距離都是 相同的,並且所有的記錄節點都是按照鍵值的大小,在同一層上順序排列的,並且各個葉子節點是由指標來鏈結的。b-tree 索引能夠加快資料的查詢速度,通常索引的大小遠小於表中資料的大小,使用b-tree索引,儲存引擎就不用全表掃瞄來獲取需要的資料,取而代之的是從根節點開始搜尋,在索引的根節點中存放了指向下層子節點的指標,儲存引擎根據這些指標向下層進行查詢,通過比較節點頁的值通過比較節點葉的值和要查詢的值呢,就可以得到合適的指標進入下層的子節點,而這些指標呢是定義了,子節點中,值得上線和下線。在innodb中葉子節點指向的是主鍵,在myisam中葉子節點指向的是資料實體地址,。另外b-tree索引呢 對索引是順序儲存的,所以適合範圍查詢,是靠鍵值來儲存的

b-tree索引在什麼情況下可以被使用到,全值匹配的查詢,order_sn=『998888』  ,匹配最左字首的查詢,匹配列字首查詢,匹配範圍值的查詢,order_sn>, 精確匹配左前列並範圍匹配另外一列,只訪問索引的查詢,btree索引可以使用在order by。

b-tree索引的限制,如果不是按照索引最左列開始查詢,則無法使用索引。使用索引是不能跳過索引列中的列。not in 和,。操作無法使用索引。如果查詢中有某個列的範圍查詢,則其右邊所有列都無法使用索引, 

hash索引的特點,

hash索引是基於hash表實現的,hash索引只有查詢條件精確匹配hash索引中的所有列時,才能夠使用到hash索引。

對於hash索引中的所有列,儲存引擎都會為每一行計算乙個hash碼,hash索引是靠hash碼來儲存的,

hash索引的限制,hash索引不支援鍵值查詢,hash索引不支援部分索引查詢也不支援範圍查詢,

索引的作用,

b-tree索引鍵值是按順序排列的,

索引大大減少了儲存引擎需要掃瞄的資料量,索引檔案大小遠小於資料檔案大小,innodb 預設一頁是16k,一頁可以儲存更多,

索引可以幫助我們進行排序以避免使用臨時表。索引可以把隨機io 變為順序io的,更加好的發揮磁碟效能,

索引會帶來哪些損耗,索引會增加寫操作的成本,太多的索引會增加查詢優化器的選擇時間,只有適當的表建立適當的索引,才是正確的做法。

索引優化策略

索引列上不能使用表示式或函式

select from product where to_days(out_date)-to_days(current_date)<=30

select from product where out_date<=date_add(current_date,interval 30 day)

字首索引和索引列的選擇性,索引的選擇性是不重複的索引值和表的記錄數的比值。

聯合索引,如何選擇索引列的順序,經常會被使用到的列優先。選擇性高的列優先。寬度小的列優先,

覆蓋索引  包含了所有需要查詢的字段的全部值的索引就稱之為覆蓋索引。

優點 可以優化快取,減少磁碟io操作。

可以減少隨即io ,變隨機io操作變為順序io操作

可以避免對innodb主鍵索引的二次查詢。

可以避免myisam表進行系統呼叫 、

覆蓋索引 無法使用覆蓋索引的情況

儲存引擎不支援覆蓋索引,查詢中使用了太多的列,覆蓋索引索引的大小比行的資料小的多,  使用了雙%號的like查詢。

使用索引來優化查詢

b-tree索引是靠鍵值順序對來儲存的,還可以用b-tree索引來做排序,

通過排序操作,按照索引順序掃瞄資料。

使用索引掃瞄來優化排序的條件,

索引的列順序和order by子句的順序完全一致

索引中所有列的方向(公升序和降序)和order by子句完全一致

order by 中的字段全部在關聯表中的第一張表中。

利用索引優化鎖

索引可以減少鎖定的行數

素銀可以加快處理速度,同時也加快了鎖的釋放

索引本身的維護和優化

刪除重複和冗餘的索引

primary key(id),unique key(id),index(id) 

index(a),index(a,b)  a,b 聯合索引

primary key(id),index(a,id) 

用工具查出哪些列存在重複索引

pt-duplicate-key-checker h=127.0.0.1

查詢未被使用過的索引,

跟新索引統計資訊及減少索引碎片,

analyze table table_name \

資料庫索引 索引優化

二 三星索引 三 合適設計理想索引 謂詞簡單謂詞和複雜謂詞 where字句中的每個條件稱為乙個謂詞。過濾因子 描述了謂詞的選擇性,即表中滿足謂詞條件的記錄行數所佔的比例 過濾因子 ff 結果集的數量 錶行的數量 平均過濾因子 1 不同列值的數量 索引片及匹配列 乙個索引定義乙個索引片,如果where...

資料庫優化 索引

鑑於csdn無故刪除博文,本部落格不再更新,暫時遷至 2索引每一本書的前幾頁一般都是目錄,而最後幾頁通常會有乙個關鍵字索引。對於資料庫來講系統表 如 sysobjects等 就是目錄,而標字段上的索引就如同書本後面的關鍵字索引。資料庫中,目錄 資料字典 和索引的區別 目錄縱向 索引橫向。優化器根據統...

資料庫索引優化

在本文中,使用如下的表tb test作為示例進行說明 create table tb test id int notnull,age int notnull,name varchar 30 not null,addr varchar 50 not null create unique index i...