
# 案例：选择合适的分布列
分布列用于将数据分布到不同的节点上，划分均衡可以避免数据倾斜。
在进行关联查询时，尽量选择查询中的关联条件作为分布键。当关联条件作为分布键时，相关数据都分布在DN本地，将减少DN之间的数据流动代价，提升查询速度。
#### 优化前
将a作为t1和t2的分布列，表定义如下：
```
CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH (a);
CREATE TABLE t2 (a int, b int) DISTRIBUTE BY HASH (a);
```
执行如下查询：
```
SELECT * FROM t1, t2 WHERE t1.a = t2.b;
```
则执行计划存在"Streaming(type: REDISTRIBUTE)"，即DN根据选定的列把数据重分布到所有的DN，这将导致DN之间存在较大通信数据量，如[图1]所示。
图1选择合适的分布列案例（一）   
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001595721561.png "点击放大")
#### 优化后
将查询中的关联条件作为分布键，执行下列语句修改b作为t2的分布列：
```
ALTER TABLE t2 DISTRIBUTE BY HASH (b);
```
将表t2的分布列改为b列之后，执行计划将不再包含"Streaming(type: REDISTRIBUTE)"，减少了DN之间存在的通信数据量的同时，执行时间也从8.7毫秒降低至2.7毫秒，从而提升查询性能，如[图2]所示。
图2选择合适的分布列案例（二）   
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001188163808.png "点击放大")
