首页 > 解决方案 > 更快的 SQL 语句 - 目前有一个缓慢的子查询 JOIN 会更快吗?

问题描述

我有一个带有子查询的 SQL 语句。由于添加了子查询,现在执行语句需要大约 10 倍的时间。我一直在阅读 JOIN 可能会更快,但我并不完全精通 SQL 以知道如何实现 JOIN 语句,或者 JOIN 甚至可以用于我的问题。

我当前的 SQL 语句,在 IIF 语句中带有子查询。

SELECT Brand, 
       DESCRIPTION AS Model, 
       SECONDDESCRIPTION AS Description, 
       PRODUCT AS [Product Code], 
       TYPE AS [Batch Type], 
       INACTIVE, CORE AS [Core Range], 
       BATCH,
       IIF(t.BATCH = 
              (SELECT TOP 1 t2.BATCH 
               FROM INVXLS AS t2 
               WHERE t2.TYPE = '' 
               AND t2.PRODUCT = t.PRODUCT),     
           t.ON_HAND - t.CUSTORD, t.ON_HAND) AS SOH 
FROM INVXLS as t

解释子查询在做什么有点罗嗦,所以如果需要更多解释,请发表评论。

我在 VB.NET 中工作,并访问一个 MS ACCESS 数据库。

有没有办法将其切换为 JOIN 语句,如果是这样,该 JOIN 语句会是什么样子?

标签: sqldatabasems-accessjoin

解决方案


不使用SELECT TOPanORDER BY是危险的。但这不是你的问题。

为了性能,您需要一个索引INVXLS(PRODUCT, TYPE, BATCH)

CREATE INDEX IDX_INVXLS_PRODUCT_TYPE_BATCH ON INVXLS(PRODUCT, TYPE, BATCH);

推荐阅读