mysql 效能優化的幾點建議

2021-07-02 08:05:49 字數 1700 閱讀 8651

1、盡量取出自己想要的字段,不要這樣select * from table

因為你取的越多,網路傳輸的資料就越多,從網路頻寬和網路緩衝區上來看都是浪費。

特別是在order,效能更是下降。,實現方式是先將需要排序的字段和可以直接定位到相關行資料的指標資訊取

出,然後在我們所設定的排序區(通過引數sort_buffer_size 設定)中進行排序,完成排序之後再次

通過行指標資訊取出所需要的columns,也就是說這種演算法需要訪問兩次資料。第二種排序演算法是從

mysql4.1 版本開始使用的改進演算法,一次性將所需要的columns 全部取出,在排序區中進行排序後直

接將資料返回給請求客戶端。改行演算法只需要訪問一次資料,減少了大量的隨機io,極大的提高了帶有

排序的query 語句的效率。但是,這種改進後的排序演算法需要一次性取出並快取的資料比第一種演算法

要多很多,如果我們將並不需要的columns 也取出來,就會極大的浪費排序過程所需要的記憶體。在

mysql4.1 之後的版本中,我們可以通過設定max_length_for_sort_data 引數大小來控制mysql 選擇

第一種排序演算法還是第二種排序演算法。當所取出的columns 的單條記錄總大小max_length_for_sort_data 設定的大

小的時候,mysql 就會選擇使用第一種排序演算法,反之,則會選擇第二種優化後的演算法。為了盡可能提高排序效能,

我們自然是更希望使用第二種排序演算法,所以在query 中僅僅取出我們所需要的columns 是非常有必要的。

2、適當建立索引,來提高查詢速度

我想每個人都知道索引能夠提高查詢速度,但是建立索引時有原則。

前提:一般對不經常變化的字段、最好不是常量字段、能夠過濾大部分資料的字段進行索引,因為如果這個字段經常

變化,當資料量很大的時候,每次更新這個字段索引都是需要重新建立的,會耗很大效能和時間的,如果這個欄位是個

常量值,要有七八個值,那麼這樣索引區中重複索引會很多,極大地浪費空間,資料量會很大,查詢的效能也不會提高。

在以下情況下索引不會起到作用:

like語句、!=、<>、函式索引、join的時候欄位不一致。

3、,大檔案、日誌、流水資訊不應該儲存在資料庫裡

4、在排序和分組的時候盡量使用索引字段

因為查詢的時候,如果按照索引進行排序的話,查詢的時候返回的資料資料已經是排序好的資料了,

在分組的時候 是先進行排序在進行分組的。

5、小的結果集驅動大的結果集

在進行join的時候,永遠都是要小的結果集來驅動大的結果集,因為mysql是通過巢狀迴圈來實現join的,也就是第一查詢出來的結果越多,那麼第二次查詢的迴圈次數也就越多,進行磁碟io操作也就多。

6、採用mysql myisam儲存引擎的時候,由於採用的是表級鎖定,那麼爭用資源物件的機率就大了,那麼對併發影響很大,那麼這個時候,

我們應該儘量減少sql執行的時候,拆分複雜的sql,變成簡單的sql,進而縮短執行sql的時間,加快響應的時間,這樣並發亮相應的也就提高了

但是有在很難拆分的情況,我可以通過增大join_buffer_size來提高join的效能。

7、在join的時候盡量使用索引字段

8、不要是自己的產品過渡理想化

如實時性,實時更新某個表的字段,在高併發的時候這樣讀寫對資料庫且是同一張表,可想而知後果,可以改為日終的時候再去處理日誌或者資料庫相關資料進行分析。

9、運用explain、profile分析sql

mysql 效能優化的幾點建議

從sql語句考慮 1 對於查詢的sql 語句 如 select 跟 insert into table name select from 還有 這種要盡可能的使用索引 除此之外,等值條件 也盡可能的使用索引 如 a.studno b.studno 2 使用explain 產看 select的執行計畫...

MySQL優化的幾點建議

設計資料表的時候要遵守三正規化,但是不要嚴格遵守。可以適度打破正規化。乙個表字段不適合過多。常用表中只要保留常用的字段 盡量給每個字段新增not null 根據表的特點來選擇合適的表引擎,如果這個表經常被寫,應該選擇innodb,但是mysql5.6一般都是選擇innodb 根據表存放的資料來決定字...

MySQL優化的幾點建議

本文 設計資料表的時候要遵守三正規化,但是不要嚴格遵守。可以適度打破正規化。乙個表字段不適合過多。常用表中只要保留常用的字段 盡量給每個字段新增not null 根據表的特點來選擇合適的表引擎,如果這個表經常被寫,應該選擇innodb,但是mysql5.6一般都是選擇innodb 根據表存放的資料來...