我们知道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能保证数据个的可靠性其他引擎能吗?