
# 案例：改写SQL消除子查询
#### 现象描述
```
select 
    1,
    (select count(*) from customer_address_001 a4 where a4.ca_address_sk = a.ca_address_sk) as GZCS 
from customer_address_001 a;
```
此SQL性能较差，查看发现执行计划中存在SubPlan，具体如下：
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558057223.jpg "点击放大")
#### 优化说明
此优化的核心就是消除子查询。分析业务场景发现a**.**ca_address_sk不为NULL，那么从SQL语义出发，可以等价改写SQL为：
```
select 
count(*) 
from customer_address_001 a4, customer_address_001 a
where a4.ca_address_sk = a.ca_address_sk
group by  a.ca_address_sk;
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
为了保证改写的等效性，在customer_address_001. ca_address_sk加了not null约束。
