从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。
分类: Sybase
2012-01-17 15:19:00
8. 数据库设计建议
在这里将给出在进行IQ数据库设计时应当遵循的一些建议。
(1) 恰当地选择字段数据类型的尺寸
• 在满足要求的前提下选择近可能“窄”的数据类型
• 如果时间数据的“小时”、“分”、“秒”等信息并不必要时,应使用DATE类型,不要使用 DATETIME(SMALLDATETIME、TIMESTAMP)。因为在IQ中DATE类型占用4个字节,而DATETIME类型占用8字节。
• 如果使用TINYINT(占用1 byte)、SMALLINT(2 byte)能满足需要,不要使用INTEGER(4 byte)、BIGINT(8 byte)
• 对于NUMERIC和DECIMAL类型(在IQ中这两个类型是等价的)不要使用缺省(精度:126、标度:38; ASE的缺省是18、0),这样会浪费存储空间;应该根据需求指定恰当的精度和标度,以节约存储空间
• 不要为CHAR和VARCHAR指定大于实际需要的长度,这样会浪费空间。
(2) IQ Uniuqe和Minimize_Storage
• 建议在创建表之前设置Minimize_Storage数据库选项,这将使IQ为表的每个字段创建优化的FP索引。
• IQ Unique可以用于为表的特定字段制定基数值,以使IQ为该字段创建合适的FP索引。
(3) 空值(Null Values)
• 好的做法是为表中的字段显示地制定NULL或NOT NULL(IQ缺省是 NULL,ASE缺省是NOT NULL)
• 在IQ中,NULL值不会节约数据页得存储空间
(4) 无符号数据类型(Unsigned Data Types)
• 对于数值字段(特别是key columns)如果可能的话,尽量使用“Unsigned”类型。因为无符号数据的压缩、处理速度更快
• 无符号类型数据间的比较操作速度比有符号的块
(5) 有关join字段
• 在join字段上尽可能使用integer数据类型(最好是unsigned int),因为整数间的比较操作比字符型数据间的比较快。此外,通常老说integer类型占用的存储空间比char少。
• Join字段上数据类型最好相同
(6) VARCHAR和CHAR
• 如果可能的话尽可能使用CHAR而不是VARCHAR,因为在IQ中CHAR类型是按照固定宽度存储的
• VARCHAR类型有一些存储开销,例如VARCHAR(100)将需要使用100个字节存储数据,另外需要1个额外的字节存放数据的长度。
• CHAR类型需要在数据后补空格,而VARCHAR类型不补空格