sql - 有没有更好、更优化的方法来执行此 SQL 查询?

标签 sql sql-server

我有一个 SQL 查询,我们在其中选择产品列表,但还需要查询订单表以查找已售出的数量。有没有更有效的方法来检索 numberSold 总和而无需子查询?

SELECT tProducts.ID as ID,
tProducts.Name,
tProducts.Description,
Highlights=Replace(Replace(tProducts.Highlights, '##productdeliverydate##', convert(varchar, @ProjectReleaseDt, 101)),'##productltdedition##', @productltdedition),
tProducts.isLocked as isLocked,
tProducts.isVisible as isVisible,
tProducts.ImageID as ImageID,
tProducts.ShippingYN as ShippingYN,
tProducts.LastDateUpdate as LastDateUpdate,
tProducts.BaseUnitPrice as Price,
    FileExtension = case  tProjectImages.FileExtention
    WHEN tProjectImages.FileExtention then tProjectImages.FileExtention
    ELSE '.none'
    END,
    @ImagePath as ImagePath,
    @ImageServerPath  as ExternalServerPath,
    @ThumbExt as ThumbnailExtension,    
    tProducts.SalesContainerTypeID,
    tProducts.ListOrder,
    tProducts.isParticipantListed,
    tProducts.LimitQuantity,
    tPRoducts.isFeature,
    numbersold=(SELECT sum(quantity) 
                  from tOrderDetails 
                  JOIN tOrders 
                    on tORders.OrderID=tORderDetails.ORderID 
                 where productID=tProducts.ID 
                   and tOrders.isTestOrder=0),
FROM tProducts
LEFT JOIN tProjectImages ON tProducts.ImageID = tProjectImages.ID
WHERE tProducts.ProjectID = @projectID  
and tProducts.isVisible=1 
and tProducts.SalesContainerTypeID = 6 
and tProducts.langID=@langID
ORDER BY tProducts.BaseUnitPrice ASC

最佳答案

如果您遇到性能问题,那么索引也许会有所帮助。

子查询的最佳索引是:tOrderDetails(productid, orderid, amount)tOrder(orderid, isTestOrder)

外部查询的最佳索引是:tProducts(ProjectId, isVisibleId, SalesContainerTypeID, langID, BaseUnitPrice, ImageID)tProjectImages(Id)

关于sql - 有没有更好、更优化的方法来执行此 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33556383/

相关文章:

mysql - phpMyAdmin 中的 SQL 脚本错误 - 外键约束

sql-server - SQL Server 2000 "Select is broken"带有 TOP 子句

java - Android - 与 SQL 查询作斗争

.net - 通过ClickOnce升级SQL实例

SQL Server 2008 数据类型 : which ones should i use?

sql - 当合并空列时不合并只是插入

mysql - 优化 SQL 以获取行数

MySQL如何检查查询是否成功执行?

sql - 如何将这两个查询合并到一个查询中

sql-server - 在 Katalon Studio 中连接到数据库并从数据库中获取一些信息