替换加入只留下一个 'Table Scan'
Substitute join to leave only one 'Table Scan'
我有财务数据。并想计算股东权益。这基本上是这样的:
我有以下有效的查询:
SELECT a.Ticker, a.Value - l.Value as 'ShareholdersEquity'
FROM FinData a
JOIN FinData l
ON a.Ticker = l.Ticker AND a.Date = l.Date
WHERE a.Type = 'assets'
AND l.Type = 'liabilities'
但是对于有很多记录的 table 来说,这会很慢,因为当我使用 Explain 检查查询时(我使用 Azure Data Studio)并且它进行了 2 table 扫描,这意味着更多的时间.我如何重写它才能更快?
您可以尝试条件聚合而不是自连接:
select ticker, date,
sum(case when type = 'asset' then value else - value end) as ShareholdersEquity
from findata
where type in ('asset', 'liabilities')
group by ticker, date
我有财务数据。并想计算股东权益。这基本上是这样的:
我有以下有效的查询:
SELECT a.Ticker, a.Value - l.Value as 'ShareholdersEquity'
FROM FinData a
JOIN FinData l
ON a.Ticker = l.Ticker AND a.Date = l.Date
WHERE a.Type = 'assets'
AND l.Type = 'liabilities'
但是对于有很多记录的 table 来说,这会很慢,因为当我使用 Explain 检查查询时(我使用 Azure Data Studio)并且它进行了 2 table 扫描,这意味着更多的时间.我如何重写它才能更快?
您可以尝试条件聚合而不是自连接:
select ticker, date,
sum(case when type = 'asset' then value else - value end) as ShareholdersEquity
from findata
where type in ('asset', 'liabilities')
group by ticker, date