資料局庫的索引優化

2021-09-11 09:08:11 字數 2560 閱讀 4425

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...