如何优化sumsql查询?

如何优化sumsql查询?,sql,Sql,我有这个疑问 select a.NoSPKJahit as 'TglSPKJahit', c.TglSPKJahit as 'spkJahit', a.SeriBarang as 'KodeSeri', b.NamaBarang as 'NamaBarang', a.JmlTotalPotong-a.JmlTotalRusakSablon as 'JumlahSPKJahit', a.JmlTotalSelesai

我有这个疑问

select  a.NoSPKJahit as 'TglSPKJahit',
        c.TglSPKJahit as 'spkJahit',
        a.SeriBarang as 'KodeSeri',
        b.NamaBarang as 'NamaBarang',
        a.JmlTotalPotong-a.JmlTotalRusakSablon as 'JumlahSPKJahit',
        a.JmlTotalSelesaiJahit as 'JumlahHasilJahit',
        (select sum(Qty) from PenjualanDTL where KodeBarang = a.KodeBarang) as 'JumlahPenjualan',
        (select sum(JumlahRetur) from StokBS where KodeBarang = a.KodeBarang) as 'JumlahRetur',
        (select sum(JumlahRusak) from StokBS where KodeBarang = a.KodeBarang) as 'JumlahRusak',
        (a.JmlTotalSelesaiJahit - (select sum(Qty) from PenjualanDTL where KodeBarang = a.KodeBarang) +((select sum(JumlahRetur) from StokBS where KodeBarang = a.KodeBarang)-(select sum(JumlahRusak) from StokBS where KodeBarang = a.KodeBarang))) as 'SisaBarang',
        (select sum(JumlahStok) from StokToko where KodeBarang = a.KodeBarang and KodeToko = 'GD000')as 'Gudang',
        (select sum(JumlahStok) from StokToko where KodeBarang = a.KodeBarang and KodeToko = 'GD001')as 'GudangAtas',
        (select sum(JumlahStok) from StokToko where KodeBarang = a.KodeBarang and KodeToko = 'GD002')as 'Mobil',
        (select sum(JumlahStok) from StokToko where KodeBarang = a.KodeBarang and KodeToko = 'OL01')as 'MissMode',
        (select sum(JumlahStok) from StokToko where KodeBarang = a.KodeBarang and KodeToko = 'TK005')as 'SilverLeafM'
from DetilBarang a
left join MsBarang b on b.KodeBarang = a.KodeBarang
left join SPKJahit c on c.NoSPKJahit = a.NoSPKJahit
但是表现很慢。如何提高查询性能? 谢谢。

你可以试试这个

SELECT A.*, sum(ISNULL(B.qty, 0)) as TotQty
from SiteInformation A
left join ItemSite B on A.SiteID = B.SiteID and A.InvtID = B.InvtID
我认为它比TotQty=从何处选择SUMQty更有效…

您可以试试这个

SELECT A.*, sum(ISNULL(B.qty, 0)) as TotQty
from SiteInformation A
left join ItemSite B on A.SiteID = B.SiteID and A.InvtID = B.InvtID

我认为它比TotQty=SELECT SUMQty FROM where…

更有效。我将子查询移动到join子句,并在。。。所有的StokToko.JumlahStok金额

请在适当的情况下将左侧外部联接更改为内部联接

加快查询速度的建议索引:

create index idx1 on msbarang (kodebarang, namabarang);
create index idx2 on spkjahit (nospkjahit, tglspkjahit);
create index idx3 on penjualandtl (kodebarang, qty);
create index idx4 on stokbs (kodebarang, jumlahretur, jumlahrusak);
create index idx5 on stoktoko (kodebarang, kodetoko, jumlahstok);

这可能是最快的。如果没有WHERE子句,您可能会查询大量数据。

我会将子查询移动到join子句,并在。。。所有的StokToko.JumlahStok金额

请在适当的情况下将左侧外部联接更改为内部联接

加快查询速度的建议索引:

create index idx1 on msbarang (kodebarang, namabarang);
create index idx2 on spkjahit (nospkjahit, tglspkjahit);
create index idx3 on penjualandtl (kodebarang, qty);
create index idx4 on stokbs (kodebarang, jumlahretur, jumlahrusak);
create index idx5 on stoktoko (kodebarang, kodetoko, jumlahstok);

这可能是最快的。如果没有WHERE子句,您可能正在查询大量数据。

您可以从查询中使用innerleft连接或交叉连接吗?它会影响你使用的是哪种产品?SQL只是一种查询语言,不是特定数据库产品的名称,您使用的是无效的标准SQL。对于您正在使用的数据库产品,请注意:a、b和c是表的坏别名,因为它们不是助记符。使用一些可以提醒表名的东西,例如db for DetilBarang。单引号是字符串文字分隔符。标准名称分隔符是双引号。很少有DBM使用专有引号,例如MySQL中的反勾号和SQLServer中的括号。若列名的大小写对您来说并不重要,我会将它们全部删除,例如a.NoSPKJahit作为TglSPKJahit。我认为您是故意使用外部联接的?如果您只需要内部联接,请改用内部联接。您应该为求和列创建列索引,这样做会更快。您可以从查询中使用innerleft联接或交叉联接吗?它会影响你使用的是哪种产品?SQL只是一种查询语言,不是特定数据库产品的名称,您使用的是无效的标准SQL。对于您正在使用的数据库产品,请注意:a、b和c是表的坏别名,因为它们不是助记符。使用一些可以提醒表名的东西,例如db for DetilBarang。单引号是字符串文字分隔符。标准名称分隔符是双引号。很少有DBM使用专有引号,例如MySQL中的反勾号和SQLServer中的括号。若列名的大小写对您来说并不重要,我会将它们全部删除,例如a.NoSPKJahit作为TglSPKJahit。我认为您是故意使用外部联接的?如果您只需要内部联接,请改用内部联接。您应该为求和列创建列索引,这样做会更快。太好了,谢谢。对于我自己的查询,完成时间是14分钟,但是对于这个查询,完成时间只有1秒。太好了,谢谢。对于我自己的查询,完成时间是14分钟,但是对于这个查询,完成时间只有1秒。