資料庫優化專題 9 索引優化

2021-10-05 22:27:07 字數 2758 閱讀 6786

資料庫優化專題—1、表的主鍵用數字還是uuid

資料庫優化專題—2、邏輯刪除還是物理刪除

資料庫優化專題—3、千萬記錄如何快速分頁

資料庫優化專題—4、讀多寫少和讀多寫多

資料庫優化專題—5、刪改資料如何避免鎖表

資料庫優化專題—6、如何避免偷換交易中的商品資訊

資料庫優化專題—7、sql語句優化

資料庫優化專題—8、mysql引數優化

資料庫優化專題—9、索引優化

資料庫優化專題—10、儲存優化

資料庫優化專題—11、資料庫結構優化

這節主要講解下索引以及如何優化。

建立以下表:

create table `tb_table` ( 

`id` int(11

) not null auto_increment comment '主鍵'

, `name` varchar(20

) default null comment '姓名'

, `number` int(11

) default null comment '編號'

, primary key (`id`)

, key `number` (`number`)

) engine=innodb auto_increment=

1 default charset=utf8;

執行以下sql,批量新增10條資料:

drop procedure if exists tb_insert; 

create procedure tb_insert()

begin

declare i int;

set i =0;

start transaction;

while i <

10 do --

10即插入10條資料

insert into tb_table (`name`,`number`) values (

concat

("張 三"

,i),i)

;

set i = i+1;

end while;

commit;

end;

call tb_insert()

;

在表沒有新增索引和新增索引的時候,都執行以下查詢:

然後再新增資料庫的資料,插入100萬條,再次測試有索引和沒有索引的查詢語句。

通過上面的對比測試可以看出,索引是快速搜尋的關鍵。mysql索引的建立對於 mysql的高效執行是很重要的。對於少量的資料,沒有合適的索引影響不是很大, 但是,當隨著資料量的增加,效能會急劇下降。

索引的目的在於提高查詢效率,大家可以回憶之前學習的全文檢索技術。類似使 用字典,如果沒有目錄(索引),那麼我們要從字典的第乙個字開始查詢到後一 個字才能有結果,可能要把字典中所有的字看一遍才能找到要結果,而目錄(索 引)則能夠讓我們快速的定位到這個字的位置,從而找到我們要的結果。

primary key (`id`)
unique key `num` (`number`) using btree
key `num` (`number`) using btree
key `num` (`number`,`name`) using btree
注意,組合索引前面索引必須要先使用,後面的索引才能使用。

在前面的例子中我們看見有using btree,這個是什麼呢?這個就是mysql所使用的索引方案,mysql中普遍使用b+tree做索引,也就是btree。

特點:

使用的場景:

全值匹配的查詢,例如根據訂單號查詢 order_sn=『98764322119900』

聯合索引時會遵循左字首匹配的原則,即左優先

匹配列字首查詢,例如:order_sn like 『9876%』

匹配範圍值的查詢,例如:order_sn > 『98764322119900』

只訪問索引的查詢

memory儲存引擎中將hash索引作為預設的索引型別。所謂hash索引,實際上就是 通過一定的hash演算法,將需要索引的鍵值進行hash運算,然後將得到的hash值存入乙個hash表中。然後每次需要檢索的時候,都會將檢索條件進行相同演算法的hash 運算,然後再和hash表中的hash值進行比較並得出相應的資訊。

特點:

full-text索引也就是我們常說的全文索引,mysql中僅有myisam和innodb儲存 引擎支援。

對於文字的大物件,或者較大的char型別的資料,如果使用普通索引,那麼匹配 文字前幾個字元還是可行的,但是想要匹配文字中間的幾個單詞,那麼就要使用 like %word%來匹配,這樣需要很長的時間來處理,響應時間會大大增加,這種情況,就可使用時fulltext索引了,在生成full-text索引時,會為文字生成乙份單詞的清單,在索引時根據這個單詞的清單來索引。

注意:

雖然索引能夠為查詢帶來速度上的提公升,但是也會對效能有一些損失。

使用索引的場景

不使用索引的場景

總結:

根據業務場景選擇是否新增索引,並選擇合理的索引,提公升查詢效率。

資料庫索引 索引優化

二 三星索引 三 合適設計理想索引 謂詞簡單謂詞和複雜謂詞 where字句中的每個條件稱為乙個謂詞。過濾因子 描述了謂詞的選擇性,即表中滿足謂詞條件的記錄行數所佔的比例 過濾因子 ff 結果集的數量 錶行的數量 平均過濾因子 1 不同列值的數量 索引片及匹配列 乙個索引定義乙個索引片,如果where...

資料庫優化 索引

鑑於csdn無故刪除博文,本部落格不再更新,暫時遷至 2索引每一本書的前幾頁一般都是目錄,而最後幾頁通常會有乙個關鍵字索引。對於資料庫來講系統表 如 sysobjects等 就是目錄,而標字段上的索引就如同書本後面的關鍵字索引。資料庫中,目錄 資料字典 和索引的區別 目錄縱向 索引橫向。優化器根據統...

資料庫索引優化

索引的作用是告訴儲存引擎快速找到我們需要的資料,兩個極端,除了主鍵沒有任何索引,給每乙個列都建立乙個索引,所以索引是在mysql儲存引擎層實現的,而不是在mysql伺服器層實現的,不同的儲存引擎的索引方式是不同的,mysql支援的索引型別,b tree索引是比較常見的,通常所說的索引就是b tree...