云服务器内容精选

  • 审视和修改表定义概述 在分布式框架下,数据分布在各个DN上。一个或者几个DN的数据存在一块物理存储设备上,好的表定义至少需要达到以下几个目标: 表数据均匀分布在各个DN上,以防止单个DN对应的存储设备空间不足造成集群有效容量下降。选择合适的分布列,避免数据分布倾斜可以实现该点。 表Scan压力均匀分散在各个DN上,以避免单DN的Scan压力过大,形成Scan的单节点瓶颈。分布列不选择基表上等值filter中的列可以实现该点。 减少扫描数据量。通过分区的剪枝机制可以实现该点。 减少随机I/O。通过聚簇可以实现该点。 避免数据shuffle,减小网络压力。通过选择join-condition或者group by列为分布列可以最大程度实现这点。 从上述描述来看表定义中最重要的一点是分布列的选择。创建表定义一般遵循图1所示流程。表定义在数据库设计阶段创建,在SQL调优过程中进行审视和修改。 图1 表定义流程 父主题: 审视和修改表定义
  • 选择数据类型 高效数据类型,主要包括以下三方面: 使用执行效率更高的数据类型 通常情况下,整型数据运算(包括“=”、“>”、“<”、“≧”、“≦”、“≠”等常规的比较运算,以及GROUP BY)的效率比字符串和浮点数的效率高。 使用短字段的数据类型 长度较短的数据类型不仅可以减小数据文件的大小,提升I/O性能,同时也可以减小相关计算时的内存消耗,提升计算性能。比如,对于整型数据,如果可以使用smallint,那么尽量避免使用用int,如果可以使用int,那么尽量避免使用bigint。 使用一致的数据类型 表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。 父主题: 审视和修改表定义