Chinaunix首页 | 论坛 | 博客
  • 博客访问: 511848
  • 博文数量: 63
  • 博客积分: 1194
  • 博客等级: 中士
  • 技术积分: 761
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 12:44
个人简介

得之坦然,失之淡然,争其必然,顺其自然!

文章分类

全部博文(63)

文章存档

2014年(2)

2013年(22)

2012年(39)

分类:

2012-10-29 16:27:15

    我们知道,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的可靠性,其他引擎能吗?

阅读(936) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~