Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4153216
  • 博文数量: 240
  • 博客积分: 11504
  • 博客等级: 上将
  • 技术积分: 4277
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-28 14:24
文章分类

全部博文(240)

分类: Mysql/postgreSQL

2010-01-25 16:29:40

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

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

chinaunix网友2010-06-09 18:08:26

hi 楼主 我是刚学的mysql cluster 想请教下: [root@localhost mysql]# /usr/sbin/mysqld 100609 17:57:31 [ERROR] Can't find messagefile '/usr/local/mysql/share/mysql/english/errmsg.sys' 100609 17:57:31 [Note] Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Unknown error 1146 100609 17:57:31 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 100609 17:57:31 InnoDB: Started; log sequence number 0 44233 100609 17:57:31 [Note] NDB: NodeID is 4, management server '192.168.1.

cesin_wang2010-01-29 11:14:48

有一些非常初级的MySQL问题想麻烦请教,不知可否。

chinaunix网友2010-01-25 17:54:54

支持,多些这种文章 让新人不要走弯路了。