mysql索引
mysql的b-tree索引特點:
1. b-tree索引以b+樹的結構儲存資料
2. b-tree索引能夠加快資料的查詢速度
3. b-tree索引更適合進行範圍查詢
使用場景:
1. 全職匹配的查詢
2. 匹配最左字首的查詢
3. 匹配列字首查詢
4. 匹配範圍值得查詢
5. 精確匹配左字首並範圍匹配另外一列
6. 只訪問索引的查詢
7. 只訪問索引查詢
btree索引的使用限制
1. 如果不是按照索引的最左列開始查詢,則無法使用索引
2. 使用索引時不能跳過索引中左邊的列
3. not in和<>操作無法使用索引
4. 如果查詢中有某個列的範圍查詢,則其右邊所有列都無法使用索引
mysql的hash索引特點:
1. hash索引時基於hash表實現的,只有查詢條件精確匹配hash索引中的所有列時,才能夠使用帶hash索引
2. 對於hash索引中的所有列,儲存引擎都會為每一行計算乙個hash碼,hash索引中儲存的就是hash碼
hash索引的使用限制:
1. hash索引必須進行二次查詢
2. hash索引無法用於排序
3. hash索引不支援部分索引查詢也不支援範圍查詢
4. hash索引中的hash碼計算可能存在hash衝突
索引的作用:
- 索引大大減少了儲存引擎需要掃瞄的資料量
- 索引可以幫助我們進行排序以避免使用臨時表
- 索引可以把隨機io變為順序io
索引是不是越多越好???
- 索引會增加寫操作的成本
- 太多的索引會增加查詢優化器的選擇時間
安裝時演示的資料庫:
索引的優化策略:
索引列上不能使用表示式或者函式:
select ... from product where todays(out_date)-todays(current_date)<=30
select ...from product where out_date<=date_add(current_date,interval 30 day)
字首索引和索引列的選擇性:
create index index_name on table(col_name(n));
※ 索引的選擇性是不重複索引值和表的記錄數的比值
聯合索引:
如何選擇索引列的順序:
1. 經常會被使用的列優先的原則
2. 選擇性高的列優先原則
3. 寬度小的列優先原則
覆蓋索引:
- 優點:
1. 可以優化快取,減少磁碟io操作
2. 可以減少隨機io,變隨機io操作為順序io
3. 可以避免對innodb主鍵索引的二次查詢
4. 可以避免myisam表進行系統呼叫
- 缺點:
1. 儲存引擎不支援覆蓋索引(eg:memory)
2. 查詢中使用了太多的列
3. 使用了雙%號的like查詢
使用索引來優化排序:
1. 通過排序操作
2. 按照索引順序掃瞄資料
> 條件:
1. 索引的列順序和order by子句的順序完全一致
2. 索引中所有列的方向(公升序,降序)和order by子句完全一致
3. order by中的字段全部在關聯表中的第一張表中
使用btree索引模擬hash索引對查詢進行優化:
alter table film add title_md5 varchar(32);
update film set title_md5 = md5(title);
create index idx_md5 on film(title_md5);
explain select * from film where title_md5=md5('egg igby') and title='egg igby';# [在不同版本的資料庫中有可能不支援]
使用btree索引模擬hash索引對查詢進行優化的限制:
1. 只能處理鍵值得全值匹配查詢
2. 所使用的hash函式決定著索引鍵的大小
通過使用索引優化鎖
1. 索引可以減少鎖定的行數
2. 索引可以加快處理速度,同時也加快了鎖的釋放
刪除重複和冗餘的索引:pt-duplicate-key-checker h=127.0.0.1
如何使用pt-duplicate-key-checker檢查冗餘索引鏈結
查詢未被使用的索引:
通過sql語句查詢進行檢查:
更新索引統計資訊及減少索引碎片:analyze table table_name/optimize table table_name[使用不當時會導致鎖表]
資料庫索引 索引優化
二 三星索引 三 合適設計理想索引 謂詞簡單謂詞和複雜謂詞 where字句中的每個條件稱為乙個謂詞。過濾因子 描述了謂詞的選擇性,即表中滿足謂詞條件的記錄行數所佔的比例 過濾因子 ff 結果集的數量 錶行的數量 平均過濾因子 1 不同列值的數量 索引片及匹配列 乙個索引定義乙個索引片,如果where...
資料庫優化 索引
鑑於csdn無故刪除博文,本部落格不再更新,暫時遷至 2索引每一本書的前幾頁一般都是目錄,而最後幾頁通常會有乙個關鍵字索引。對於資料庫來講系統表 如 sysobjects等 就是目錄,而標字段上的索引就如同書本後面的關鍵字索引。資料庫中,目錄 資料字典 和索引的區別 目錄縱向 索引橫向。優化器根據統...
資料庫索引優化
索引的作用是告訴儲存引擎快速找到我們需要的資料,兩個極端,除了主鍵沒有任何索引,給每乙個列都建立乙個索引,所以索引是在mysql儲存引擎層實現的,而不是在mysql伺服器層實現的,不同的儲存引擎的索引方式是不同的,mysql支援的索引型別,b tree索引是比較常見的,通常所說的索引就是b tree...