MySQL資料庫最佳化知識學習備忘

來源:互聯網
上載者:User

碰到過好幾次這樣的題目,可每次都不能答的完全正確.現在大概列出如下:(忘各位補充)

  1.資料庫的設計
  盡量把資料庫設計的更小的占磁碟空間.

  1).儘可能使用更小的整數類型.(mediumint就比int更合適).
  2).儘可能的定義欄位為not null,除非這個欄位需要null.
  3).如果沒有用到變長欄位的話比如varchar,那就採用固定大小的紀錄格式比如char.
  4).表的主索引應該儘可能的短.這樣的話每條紀錄都有名字標誌且更高效.
  5).只建立確實需要的索引。索引有利於檢索記錄,但是不利於快速儲存記錄。如果總是要在表的組合欄位上做搜尋,那麼就在這些欄位上建立索引。索引的第一部分必須是最常使用的欄位.如果總是需要用到很多欄位,首先就應該多複製這些欄位,使索引更好的壓縮。
  6).所有資料都得在儲存到資料庫前進行處理。
  7).所有欄位都得有預設值。
  8).在某些情況下,把一個頻繁掃描的表分成兩個速度會快好多。在對動態格式表掃描以取得相關記錄時,它可能使用更小的靜態格式表的情況下更是如此。

  2.系統的用途
  1).盡量使用長串連.
  2).explain 複雜的SQL語句。
  3).如果兩個關聯表要做比較話,做比較的欄位必須類型和長度都一致.
  4).LIMIT語句盡量要跟order by或者 distinct.這樣可以避免做一次full table scan.
  5).如果想要清空表的所有紀錄,建議用truncate table tablename而不是delete from tablename.
  6).能使用STORE PROCEDURE 或者 USER FUNCTION的時候.
  7).在一條insert語句中採用多重紀錄插入格式.而且使用load data infile來匯入大量資料,這比單純的indert快好多.
  8).經常OPTIMIZE TABLE 來整理片段.
  9).還有就是date 類型的資料如果頻繁要做比較的話盡量儲存在unsigned int 類型比較快。

  3.系統的瓶頸
  1).磁碟搜尋.
  並行搜尋,把資料分開存放到多個磁碟中,這樣能加快搜尋時間.

  2).磁碟讀寫(IO)
  可以從多個媒介中並行的讀取資料。

  3).CPU周期
  資料存放在主記憶體中.這樣就得增加CPU的個數來處理這些資料。

  4).記憶體頻寬
  當CPU要將更多的資料存放到CPU的緩衝中來的話,記憶體的頻寬就成了瓶頸.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.