SELECT * from crawl_public.d_fund_nv where statistic_date='2023-09-20' and fund_id not in (SELECT distinct fund_id from base_public.fund_nv_source where statistic_date='2023-09-20' )
优化这个sql文章来源:https://uudwc.com/A/DN3Od
对于您提供的 SQL 查询语句,以下是一些可能的优化建议:
1. 使用 JOIN 替代子查询:将子查询中的 `SELECT DISTINCT` 改为使用 JOIN 操作,可以提高查询性能。这样可以避免在每次执行子查询时进行重复的计算。
```sql
SELECT d.*
FROM crawl_public.d_fund_nv AS d
LEFT JOIN (
SELECT DISTINCT fund_id
FROM base_public.fund_nv_source
WHERE statistic_date = '2023-09-20'
) AS b ON d.fund_id = b.fund_id
WHERE d.statistic_date = '2023-09-20' AND b.fund_id IS NULL;
- 索引优化:对于经常用于过滤条件的列,可以考虑为这些列创建索引,以提高查询性能。在这个查询中,对
crawl_public.d_fund_nv
表的statistic_date
列和fund_id
列,以及base_public.fund_nv_source
表的statistic_date
列和fund_id
列创建索引可能会有帮助。
-- 创建索引示例
CREATE INDEX idx_d_fund_nv_statistic_date ON crawl_public.d_fund_nv (statistic_date);
CREATE INDEX idx_d_fund_nv_fund_id ON crawl_public.d_fund_nv (fund_id);
CREATE INDEX idx_fund_nv_source_statistic_date ON base_public.fund_nv_source (statistic_date);
CREATE INDEX idx_fund_nv_source_fund_id ON base_public.fund_nv_source (fund_id);
请注意,优化 SQL 查询的效果取决于数据库的结构、数据量和配置等因素。建议在进行任何更改之前,在测试环境中进行适当的基准测试和性能评估。文章来源地址https://uudwc.com/A/DN3Od