總結 MySql在建立索引優化時需要注意的問題

2021-06-20 11:45:10 字數 1841 閱讀 7755

from:

1,建立索引

不是什麼情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什麼優勢,還會影響到更新速度,這被稱為過度索引。

2,復合索引

比如有一條語句是這樣的:select * from users where area=』beijing』 and age=22;

如果我們是在area和age上分別建立單個索引的話,由於mysql查詢每次只能使用乙個索引,所以雖然這樣已經相對不做索引時全表掃瞄提高了很多效

率,但是如果在area、age兩列上建立復合索引的話將帶來更高的效率。如果我們建立了(area, age,

salary)的復合索引,那麼其實相當於建立了(area,age,salary)、(area,age)、(area)三個索引,這被稱為最佳左字首

特性。因此我們在建立復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。

3,索引不會包含有null值的列

只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。

4,使用短索引

對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的 列,如果在前10 個或20 個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。

5,排序的索引問題

mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。

6,like語句操作

一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。

7,不要在列上進行運算

select * from users where

year(adddate)

8,不使用not in和操作

not in和操作都不會使用索引將進行全表掃瞄。not in可以not exists代替,id3則可使用id>3 or id

以下情況不要建索引:

* 1、如果每次都需要取到所有表記錄,無論如何都必須進行全表掃瞄了,那麼是否加索引也沒有意義了。

* 2、對非唯一的字段,例如「性別」這種大量重複值的字段,增加索引也沒有什麼意義。

* 3、對於記錄比較少的表,增加索引不會帶來速度的優化反而浪費了儲存空間,因為索引是需要儲存空間的,而且有個致命缺點是對於update/insert/delete的每次執行,欄位的索引都必須重新計算更新

以下情況要建立索引

select c.companyid, c.companyname from companies c, user u where c.companyid = u.fk_companyid and c.numemployees >= 0 and c.companyname like '%i%' and u.groupid in (select g.groupid from groups g where g.grouplabel = 'executive')

這條語句涉及3個表的聯接,並且包括了許多搜尋條件比如大小比較,like匹配等。在沒有索引的情況下mysql需要執行的掃瞄行數是77721876行。而我們通過在companyid和grouplabel兩個欄位上加上索引之後,掃瞄的行數隻需要134行。在mysql中可以通過explain select來檢視掃瞄次數。可以看出來在這種聯表和複雜搜尋條件的情況下,索引帶來的效能提公升遠比它所佔據的磁碟空間要重要得多。

MySql在建立索引優化時需要

mysql在建立索引優化時需要注意的問題 檀健飛 表的主關鍵字 自動建立唯一索引 如zl yhjbqk 使用者基本情況 中的hbs bh 戶標識編號 表的字段唯一約束 oracle利用索引來保證 資料的完整性 如lc hj 流程環節 中的lc bh hj sx 流程編號 環節順序 直接條件查詢的字段...

MySql在建立索引優化時需要注意的問題

設計好mysql的索引可以讓你的資料庫飛起來,大大的提高資料庫效率。設計mysql索引的時候有一下幾點注意 1,建立索引 對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加 索引的話,那麼查詢任何哪怕只是一...

MySql在建立索引優化時需要注意的問題

設計好mysql的索引可以讓你的資料庫飛起來,大大的提高資料庫效率。設計mysql索引的時候有一下幾點注意 1,建立索引 對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加 索引的話,那麼查詢任何哪怕只是一...