18種mysql的資料庫優化

2021-08-28 22:51:04 字數 1813 閱讀 3080

1.對查詢進行優化,應該盡量避免全表掃瞄,首先應該考慮在where及order by涉及的列上建立索引

2.應該盡量避免在where 子句中使用!= 或者<>操作符,否則引擎將放棄索引而進行全表掃瞄

3.應該盡量避免在where子句中對字段進行null值判斷,否則將導致引擎放棄使用索引進行全表掃瞄,例如:select id from t where name = null,可以將null改為0,確保表中沒有null,然後用0查詢

4.應該盡量避免在where子句中使用or來連線條件,否則將導致引擎放棄使用索引而進行全表掃瞄,例如:select id from t where name =1 or pass=2;應該使用select id from t where name=1 union all select id from t where name=2;

5.下面的查詢也將導致全表掃瞄:select id from t where name like "%abc%",所以要避免like裡%應該在後面,前面不要出現%

6.in 和not in也要慎用,否則將導致全表掃瞄,例如:select id from t where name in(1,2,3),對於連續的值應該用between不要用 in

7。如果在where子句中使用引數,也會導致全表掃瞄,因為sql只有在執行時才會解析區域性變數,但優化程式不能將訪問計畫的選擇推遲到執行時,它必須在編譯時進行選擇(暫時用不到)

8.應該盡量避免在where子句中對字段進行表示式操作,這將導致引擎放棄使用索引而進行全表掃瞄,如:select id from t where name/2 = 100,應該改為:select id from t where num = 2*100;

9.應該盡量避免在where子句中對字段進行函式操作,這將導致引擎放棄索引而進行全表掃瞄,例如:select id from t where substring(name ,1,3)='abc' --name 以abc開頭的id,應該改為:select id from t where name like 'abc%'

10.不要在where子句中=號的左邊進行函式,算術運算或其他表示式運算,否則系統將可能無法正確使用索引

11.在使用索引字段作為條件時,如果改索引時復合索引,那麼必須使用到該索引中的第乙個字段作為條件時才能保證系統使用該索引,否則該索引將不會使用,並且盡可能的讓字段順序與索引順序相一致;

12.很多時候用exists代替in是乙個好的選擇,

13.並不是所有的索引對查詢都有效,sql是根據表中的資料進行查詢優化的,當索引列有大量資料重複時,sql查詢可能不會去利用索引,如一表中有字段***,male,female幾乎個一半,那麼即使在***上建立索引也對查詢效率起不來作用

14.索引並不是越多越好,索引固然可以提高相應的select的效率,但同時也降低了insert和update的效率,因為insert和update時,有可能重建索引,所以,怎麼樣建索引需要慎重考慮,視情況而定,乙個表的索參數量最好不要超過6個,若太多的話,則應該考慮一些不常使用到的列上建的索引是否有用

15.應盡可能的避免更新 clustered 索引資料列,因為 clustered 索引資料列的順序就是表記錄的物理儲存順序,一旦該列值改變將導致整個表記錄的順序的調整,會耗費相當大的資源。若應用系統需要頻繁更新 clustered 索引資料列,那麼需要考慮是否應將該索引建為 clustered 索引

16.盡量使用數字型字段,若只含數值資訊的字段盡量不要設定為字元型,這會降低查詢和連線的效能,並且會增加儲存開銷,這是因為引擎在處理查詢和連線時會逐個比較字串每乙個字元

17.避免頻繁建立和刪除臨時表,以減少系統表資源的消耗

18.盡量避免使用游標,因為游標的效率較差,如果游標操作的資料超過1萬行,那麼就應該考慮改寫

Mysql資料庫優化的八種方式

把表中字段的寬度設的盡可能小 在可能的情況下盡量把字段設定為notnull,這樣在將來執行查詢的時候,資料庫不用去比較null值 可以設定為數字型的盡量設定為數值型,因為數值型處理起來的速度比文字型別快得多。delete from customerinfo where customerid not ...

Mysql資料庫優化的八種方式

1 選取最適用的字段屬性 mysql可以很好的支援大資料量的訪問,但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在建立表的時候,為了獲得更好的效能,我們可以將表中字段的寬度設得盡可能小。2 使用連線 join 來代替子查詢 sub queries 3 使用聯合 union 來代...

mysql資料庫的優化

先學習一下mysql的相關優化問題,主要是從提高mysql資料庫伺服器的效能的思路進行考慮,主要包含以下8個方面的優化 1 選取最適用的字段屬性 2 使用連線 join 來代替子查詢 sub queries 3 使用聯合 union 來代替手動建立的臨時表 4 事務 5 鎖定表 6 使用外來鍵 7 ...