MySQL高階設計之四 索引

2021-08-01 16:37:31 字數 2468 閱讀 9669

一、索引的型別:

b-tree索引的特點:

1、以b+樹結構儲存資料

2、加快資料的查詢速度

3、更適合範圍查詢

使用場景

1、全治匹配的查詢

order_sn= 『11111111』

2、匹配最左字首的查詢

3、匹配列字首查詢

如 order_sn like 『22222%』

4、匹配範圍值的查詢

order_sn > 『jjjj』

5、精確匹配坐前列並範圍匹配另外一列

6、只訪問索引的查詢

使用限制

1、如果不是按照索引最左列開始查詢,則無法使用索引

2、使用索引時不能跳過索引中的列

3、not in 和 <>操作無法使用索引

4、如果查詢中有某個列的範圍查詢,則其右邊所有列都無法使用索引

hash索引的特點

1、hash索引是基於hash表實現的,只有查詢條件精確匹配hash索引中所有列時才可使用(等值查詢,不能查範圍 )

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

使用限制

1、hash索引必須進行二次查詢

2、hash索引無法用於排序

3、hash索引不支援部分索引查詢也不支援範圍查詢

4、hash索引中hash碼的計算可能存在hash衝突

使用索引作用

1、大大減少儲存引擎需要掃瞄的資料量

2、可以幫助我們進行排序以避免使用臨時表

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

壞處 索引會增加寫操作的成本

太多的索引會增加查詢器的操作時間

索引優化策略

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

2、字首索引和索引列的選擇性

create index index_name on table(col_name(n))最大寬度1000,255個字元,字首索引會降低索引選擇性

索引選擇性:是不重複的索引值和表的記錄數的比值

聯合索引

如何選擇索引列的順序

1、經常會被使用到的列優先

2、選擇性高的列優先

3、寬度小的列優先

覆蓋索引

優點:

可以優化快取,減少磁碟i/o操作

可以減少隨機i/o,變隨機i/o為順序i/o

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

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

無法使用覆蓋索引的情況

儲存引擎不支援覆蓋索引

查詢中使用了太多的列

使用了雙%的like查詢

刪除重複和冗餘索引

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

index(a),index(a,b)

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

pt-duplicate-key-checker h=127.0.0.1檢查索引工具

查詢未被使用過的索引

select object_schema,object_name,index_name,b.table_rowsfrom performance_schema.table_io_waits_summary_by_index_usage a join information_schema.tables b on a.object_schema= b.table_schemaand a.object_name= b.table_namewhere index_name is not null and count_star=0 order by object_schema,object_name

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

analyze table table_name

使用索引掃瞄來優化排序

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

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

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

模擬hash索引優化查詢

只能處理鍵值的全指匹配查詢

所使用的hash函式決定著索引鍵的大小

利用索引優化鎖

索引可以減少鎖定的行數

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

MySQL高階之索引

索引是一種特殊的檔案 innodb資料表上的索引是表空間的乙個組成部分 它們包含著對資料表裡所有記錄的引用指標。更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度 索引的目的在於提高查詢效率,可以模擬字典,如果要查 mysql 這個單詞,我們肯定需要定位到m字母,然後從下往下找到y...

mysql高階索引 Mysql高階 索引優化全解

是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...

mysql高階 索引

mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...