Schema的最佳化和索引

來源:互聯網
上載者:User

這一章的結束,我們來說一下關於設計模型的儲存引擎的選擇,這些你應該牢記。我們不會全面的介紹儲存引擎,目標就是列出一些影響資料模型設計的一些關鍵性因素。

MyISAM儲存引擎

表鎖(Table locks)

MyISAM是表一級的鎖。小心地是這個不會成為一個瓶頸。

沒有自動資料恢複(No automated data recovery)

如果MySQL伺服器掛了或者電源關閉。你應該在使用表之前來修複MyISAM表。如果有個大表,這個過程可能會持續幾個小時。

不支援事物(No transactions)

MyISAM不支援事物。事實上,MyISAM表不能保證一個單獨的語句會執行完成。如果一個錯誤發生在多個UPDATE之中,一些行被更新而另外的行並不會更新。

只有索引會被緩衝(Only indexes are cached in memory)

在MySQL進程內部,關鍵的緩衝區中,MyISAM只會緩衝索引。作業系統緩衝了表的資料,因此在MySQL5.0中,要想擷取資料,就需要作業系統的調用。這個過程消耗是較大的。

壓縮儲存(Compact storage)

每一行都是緊挨著的,因此需要的硬碟就會小並且全表掃描就會很快。

Memory儲存引擎

表鎖(Table locks)

像MyISAM表一樣,Memory表支援表鎖。這不是個問題,因為語句都是在記憶體中執行的。非常快。

沒有動態行(No dynamic rows)

Memory表不支援動態(比如,變數的長度)行,因此它們不支援BLOB,TEXT欄位。一個VARCHAR(5000)轉為CHAR(5000)-如果大部分資料都是小的話,就會浪費大量記憶體。

Hash索引是預設的索引類型(Hash indexes are the default index type)

不像其他的儲存引擎,它的預設索引類型是hash。

沒有索引統計(No index statistics)

Memory表不支援索引統計,因此可能對於複雜的查詢,執行很不理想。

重啟動後內容丟失(Content is lost on restart)

Memory不會持久化任何資料。因此伺服器重啟後,資料都會丟失,但表還是存在的。

InnoDB儲存引擎

事物(Transactional)

InnoDB支援事物,並且支援4個層級的事物隔離等級。

外鍵(Foreign keys)

MySQL5.0,InnoDB是唯一支援外鍵的儲存引擎。其他儲存引擎在CREATE TABLE時可以建立外鍵,但是不會約束。一些第三方引擎,比如solidDB以及PBXT,在儲存引擎層級支援它們。MySQL AB準備在伺服器層級支援外鍵。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.