資料庫索引優化

2021-08-13 19:51:24 字數 2452 閱讀 4339

在本文中,使用如下的表tb_test作為示例進行說明:

create

table tb_test

( id int

notnull,

age int

notnull,

name varchar(30) not

null,

addr varchar(50) not

null

);create

unique index idx1_tb_test on tb_test(id);

create index idx2_tb_test on tb_test(name);

create index idx3_tb_test on tb_test(addr);

索引優化建議

1.對索引列進行計算

例如,我們想要將表tb_test中id大於100的資料記錄中的age和name查詢出來。

正確的sql語句是:

select age,name from tb_test where id > 1*100;

不建議採用的sql語句是:

select age,name from tb_test where id/100 > 1;

2.對索引列進行拼接

例如,我們想要將表tb_test中name為「zhou」、addr為「cq」的記錄中的id和age查詢出來。

正確的sql語句是:

select id,age from tb_test where name=』zhou』 and addr=』cq』;

不建議採用的sql語句是:

select id,age from tb_test where concat(name,』 『,addr) = 『zhou cq』;

3.在索引列上is null或is not null的使用

例如,我們想要將表tb_test中id大於等於「0」的記錄中的age查詢出來。

正確的sql語句是:

select age from tb_test where id >= 0;

不建議採用的sql語句是:

select age from tb_test where id is not null;

4.在索引列上or的使用

例如,我們想要將表tb_test中id等於101或102的記錄中的age和name查詢出來。

正確的sql語句(使用union)是:

select age,name from tb_test where id = 101 union select age,name from tb_test where id = 102;

不建議採用的sql語句(使用or)是:

select age,name from tb_test where id = 101 or id = 102;

5.盡可能避免索引列在like的首字元使用萬用字元

例如,我們想要將表tb_test中name匹配「zho」的記錄中的id和age查詢出來。

正確的sql語句是:

select id,age from tb_test where name like 『zho%』;

不建議採用的sql語句是:

select id,age from tb_test where name like 『%ho%』;

6.復合索引的使用

如果我們建立的索引是復合索引,那麼必須使用到該索引中的第乙個字段作為條件時才能保證系統使用該索引。

例如,我們在表tb_test上新建了如下索引:

create index idx4_tb_test on tb_test(id,name,addr);

以上索引idx4_tb_test相當於建立了index(id)、index(id,name)、index(id,name,addr) 這3個索引。在sql語句的where條件中單獨使用name或addr時不會使用到該索引,必須使用id時才會使用到該索引。

總結在我們編寫的sql語句中,不正確地使用索引列可能會導致索引不被使用,而進行全表掃瞄,極大地降低了資料庫的效能。因此,學習正確的索引的使用方法實在是很有必要的。

但是,需要指出的是,本文中提到的資料庫索引的優化語句必須要在操作大量資料時才能顯示出效果。在編寫資料庫指令碼之前,大家可以先評估一下系統的資料量,看是否有必要在sql優化上花費大量的時間。

資料庫索引 索引優化

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

資料庫優化 索引

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

資料庫索引優化

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