關於NDB的表優化

2021-05-21 16:27:19 字數 1100 閱讀 2849

我們知道,mysql cluster 產品用的主要的引擎為:ndb。 很多人說對於ndb來說,執行sql語句的效能很差。但是我覺得主要是沒有仔細的探索。

對於資料庫來說,要判斷他的效能如何,無非是要看兩點:

1. 對於資料庫的寫操作,這裡涉及到insert, delete,update, drop等實實在在的語句。

2. 對於資料庫的讀操作,這裡主要是用來查詢的select語句。

那麼,我們怎麼樣才能對這些語句,也就是說讓這些語句在用在他們擅長的場合呢?首先我們來看看初步看看寫操作的優化。

對於寫來說,要優化有以下幾點:

1. 選擇合適的字段型別。 比如:你要儲存3個位元組的字元到ndb,那麼你應該選擇varchar(3), 而不是varchar(4)或者 varchar(5)。 因為對於ndb來講,每一行的每一列都要對應的以4個位元組的倍數來儲存,所以對於varchar(3)來說,對於4個位元組,那麼對於varchar(4) 呢,就得等於8個位元組了。

2. 選擇合適的索引, 刪除不必要的索引。 大家都知道,ndb自身可用的索引型別為t-tree和hash。 對於任何主鍵和唯一索引,都以hash結構來存放。對於其他的索引,都以t-tree來存放。那麼我們來看下面的這個簡單的表結構:

create table ytt_1 (id int not null, primary key (id)) engine ndb;

create table ytt_2 (id int not null, primary key (id) using hash) engine ndb;

大家覺得上面兩個表結構的寫效能哪個好呢?答案是ytt_2. 這個可以好好思考下為什麼!

那麼對於讀呢?怎麼優化?

有的人會問,我看到一大堆大堆得人把ndb 和 innodb 以及myisam這些傳統的引擎來對比。 這無疑是一種大大的錯誤! 其實說白了,他們的處理方式是一樣的。但是你的對比硬體環境是否允許?

1. ndb 為什麼叫ndb? network database。網路資料庫。也就是說ndb的每項操作都要跟網路相關。特別是對於他不擅長的join操作。

2. 對於單錶而且是根據主鍵來查詢,那速度可是來的非常快!

其實最重要的一點就是ndb能保證資料5個9的可靠性,其他引擎能嗎?

關於NDB和VOR的選擇

最近自己總結出的一些,不能代表實際飛行中的操作,僅能說明模擬器操作 一 頻率 ndb的頻率普遍存在於mw波段 中波,高於300khz低於3000khz vor的頻率普遍存在於vhf波段 甚高頻,高於30mhz低於300mhz 二者的無線電波傳播特性有所不同。中波波段主要是以地波傳播為主,即貼近地球表...

關於Android ListView的優化問題

if convertview null else 但是我在專案中做了乙個帶下拉重新整理的listview,也是用上面的方法優化listview,然並卵,介面還是很卡。後來查了資料,發現在設定listview的layout width和layout height這兩個屬性時用wrap content時...

關於Switch Case的優化

switch case雖然是代替if else而出現的,並不好維護,有時候使用switch還不如使用if else。但沒有別的東西能代替switch case了嗎?答案當然是否定的,現在就有兩種方式。先看一下使用switch的例子 設定乙個函式,傳進來num為1,2,3,4分別返回不同的值 這種情況...