0
SELECT     
    tbStok.sModel AS Kod, tbStok.sAciklama AS Adı, 
    SF.lFiyat AS SF, PSF.lFiyat AS PSF, 
    TL.lFiyat AS TL , USD.lFiyat AS USD
FROM         
    tbStok 
LEFT JOIN 
    tbStokFiyati AS TL ON tbStok.nStokID =  TL.nStokID 
LEFT JOIN 
    tbStokFiyati AS SF ON tbStok.nStokID =  SF.nStokID
LEFT JOIN 
    tbStokFiyati AS PSF ON tbStok.nStokID = PSF.nStokID 
LEFT JOIN 
    tbStokFiyati AS USD ON tbStok.nStokID = USD.nStokID
GROUP BY 
    tbStok.sModel, tbStok.sAciklama, SF.lFiyat, PSF.lFiyat, TL.lFiyat,USD.lFiyat

以上是我正在使用的 SQL 语句。

查询开始时,结果为 7255470 行,但tBstok表中有 18867 行。

我们在tbStok表格中有产品信息,有 2 个不同的列,例如产品代码和产品名称。在另一个名为 的表中tbStokFiyati,我需要获取 4 个不同的列。

结果很慢!

4

2 回答 2

0

这张桌子需要与 tbStokFiyati 分开。


SELECT     
    tbStok.sModel AS Kod, tbStok.sAciklama AS Adı, 
    SF.lFiyat AS SF, PSF.lFiyat AS PSF, 
    TL.lFiyat AS TL , USD.lFiyat AS USD  
FROM   tbStok 

LEFT JOIN 
    tbStokFiyati AS TL ON tbStok.nStokID =  TL.nStokID 
                      and TL.sFiyatTipi='TL'

LEFT JOIN tbStokFiyati AS SF ON tbStok.nStokID =  SF.nStokID
                      and SF.sFiyatTipi='SF'

LEFT JOIN tbStokFiyati AS PSF ON tbStok.nStokID = PSF.nStokID 
                      and PSF.sFiyatTipi='PSF'

LEFT JOIN tbStokFiyati AS USD ON tbStok.nStokID = USD.nStokID
                      and USD.sFiyatTipi='USD'

GROUP BY 
    tbStok.sModel, tbStok.sAciklama, SF.lFiyat, PSF.lFiyat, TL.lFiyat,USD.lFiyat

于 2013-11-05T07:53:02.917 回答
-1

在处理此类性能问题时,您应该重新审视的第一件事是数据库设计。PK 是否已相应定义?您是否在每个 FK 上创建了 NON CLUSTERED INDEX 以渗透连接?您是否为查询中使用的有趣列创建了索引?您可以在 SQL Server Management Studio 上使用一项称为实际执行计划的功能来检查查询性能出了什么问题。

请查看SQL Server Index Basics以获得进一步的参考。
还有一些用于了解基本和高级执行计划的实用链接:
* http://www.simple-talk.com/sql/performance/execution-plan-basics/
* http://www.mssqltips.com/sqlservertip/1856 /sql-server-query-execution-plans-in-sql-server-management-studio/

Actual和Esitmated执行计划的区别:
* http://blog.sqlauthority.com/2007/08/28/sql-server-actual-execution-plan-vs-estimated-execution-plan/

于 2013-06-07T14:18:49.677 回答