數據局庫的索引優化

數據局庫的索引優化

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




索引是否是越多越好???

- 索引會增長寫操做的成本

- 太多的索引會增長查詢優化器的選擇時間



安裝時演示的數據庫:


wget downloads.mysql.com/docs/sakila…

tar -zxf sakila-db.tar.gz

mysql -uroot -p < sakila-schema.sql

mysql -uroot -p < sakila-data.sql

索引的優化策略:


索引列上不能使用表達式或者函數:


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[使用不當時會致使鎖表]
相關文章
相關標籤/搜索