博客统计信息

51cto博客之星
用户名:david_yeung
文章数:205
评论数:178
访问量:282972
无忧币:2857
博客积分:3922
博客等级:7
注册日期:2008-06-05

谈NDB表的优化
2010-01-25 16:32:04
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yueliangdao0608.blog.51cto.com/397025/270264
    我们知道,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的可靠性,其他引擎能吗?

本文出自 “上帝,咱们不见不散!” 博客,请务必保留此出处http://yueliangdao0608.blog.51cto.com/397025/270264

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:MySQL集群技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2010-01-27 11:32:22
都没有注意到 博主细心很

2010-04-10 18:52:18
所以对于VARCHAR(3)来说,对于4个字节,
是不是错别字了

2010-10-19 23:55:31
进一步学习和参考

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: