一、索引的型別:
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_rows
from performance_schema.table_io_waits_summary_by_index_usage a join information_schema.tables b on a.object_schema
= b.table_schema
and a.object_name
= b.table_name
where 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高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...