
# 审视和修改表定义
在分布式框架下，数据分布在各个DN上。一个或者几个DN的数据存在一块物理存储设备上，较好的表定义需要满足以下要求：
1. **表数据均匀分布在各个** **DN** **上**，以防止单个DN对应的存储设备空间不足造成集群有效容量下降。选择合适分布列，避免数据分布倾斜可以实现该点。
2. **表** **Scan** **压力均匀分散在各个** **DN** **上**，以避免单DN的Scan压力过大，形成Scan的单节点瓶颈。分布列不选择基表上等值filter中的列可以实现该点。
3. **减少扫描数据量**。通过分区的剪枝机制可以实现该点。
4. **尽量减少随机** **IO**。通过聚簇/局部聚簇可以实现该点。
5. **尽量避免数据** **shuffle**，减小网络压力。通过选择join-condition或者group by列为分布列可以最大程度的实现这点。
从上述描述来看表定义中最重要的一点是分布列的选择。创建表定义一般遵循[图1]所示流程。表定义在数据库设计阶段创建，在SQL调优过程中进行审视和修改。
图1表定义流程   
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000002054191302.png "点击放大")
审视和修改表定义的具体操作方法，请参见[基于表结构设计和调优提升DWS查询性能](https://support.huaweicloud.com/bestpractice-dws/dws_05_0006.html)。
