我們知道MySQL Cluster 產品用的主要的引擎為NDB 很多人說對於NDB來說執行SQL語句的性能很差但是我覺得主要是沒有仔細的探索
對於數據庫來說要判斷他的性能如何無非是要看兩點
對於數據庫的寫操作這裡涉及到INSERT DELETEUPDATE DROP等實實在在的語句
對於數據庫的讀操作這裡主要是用來查詢的SELECT語句
那麼我們怎麼樣才能對這些語句也就是說讓這些語句在用在他們擅長的場合呢?首先我們來看看初步看看寫操作的優化
對於寫來說要優化有以下幾點
選擇合適的字段類型 比如你要存儲個字節的字符到NDB那麼你應該選擇VARCHAR() 而不是VARCHAR()或者 VARCHAR() 因為對於NDB來講每一行的每一列都要對應的以個字節的倍數來存儲所以對於VARCHAR()來說對於個字節那麼對於VARCHAR() 呢就得等於個字節了
選擇合適的索引 刪除不必要的索引 大家都知道NDB自身可用的索引類型為TTREE和HASH 對於任何主鍵和唯一索引都以HASH結構來存放對於其他的索引都以TTREE來存放那麼我們來看下面的這個簡單的表結構
create table ytt_ (id int not null primary key (id)) engine ndb;
create table ytt_ (id int not null primary key (id) using hash) engine ndb;
大家覺得上面兩個表結構的寫性能哪個好呢?答案是ytt_ 這個可以好好思考下為什麼!
那麼對於讀呢?怎麼優化?
有的人會問我看到一大堆大堆得人把NDB 和 INNODB 以及MYISAM這些傳統的引擎來對比 這無疑是一種大大的錯誤! 其實說白了他們的處理方式是一樣的但是你的對比硬件環境是否允許?
NDB 為什麼叫NDB? NETWORK DATABASE網絡數據庫也就是說NDB的每項操作都要跟網絡相關特別是對於他不擅長的JOIN操作
對於單表而且是根據主鍵來查找那速度可是來的非常快!
其實最重要的一點就是NDB能保證數據個的可靠性其他引擎能嗎?
From:http://tw.wingwit.com/Article/program/MySQL/201311/11202.html