簡體   English   中英

SQL計數查詢的性能改進

[英]Performance improvement for SQL count query

我將使用哪種類型的SQL查詢來進行以下操作;

|  ID  |  SERIAL  |  LCN  | INITLCN |
|------|----------|-------|---------|
|  1   |    A     |  A1   |         |
|  2   |    B     |  A2   |         |
|  3   |    C     |  A3   |   A1    |
|  4   |    D     |  A4   |   A2    |
|  5   |    E     |  A5   |   A1    |
|------|----------|-------|---------|

結果與此相似;

|  ID  |  COUNT  |
|------|---------|
|  1   |    2    |
|  2   |    1    |
|------|---------|

使用我較低的SQL技能,我設法編寫了以下查詢,但是它非常慢。

select
  a.id,
  count (b.id) as parent
from assets a 
left join assets b
  ON (a.lcn = b.initlcn)
group by a.id
order by a.id;
select
t1.ID,
t1.LCN,
COUNT(*)
from
Table1 t1
INNER JOIN Table1 t2 ON t1.LCN = t2.INITLCN
GROUP BY t1.LCN

看到它在sqlfiddle中實時工作。

也許兩個表聯接不是nesecerry。 嘗試這個

select 
a.id
,b.cnt
from assets a
join (
 select 
 initlcn
 count(1) cnt
 from assets
 group by initlcn
)
b on (a.lcn=b.initlcn)

您還可以測試以下查詢-

我已經檢查了您發布的查詢和以下查詢的執行計划,並且兩者之間取得了很大的不同-

SELECT t_1.Id, t_2.Cnt
  FROM Assets t_1,
       (SELECT Initlcn, COUNT(*) Cnt FROM Assets GROUP BY Initlcn) t_2
 WHERE t_1.Lcn = t_2.Initlcn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM