首页 > 解决方案 > SQL:改进字符串拆分

问题描述

我有一组代码,它接受一个字符串值,拆分它,然后将它传递给一个表。该代码有效,但运行缓慢。任何修改代码并使其运行更快的建议将不胜感激。

DECLARE @StrPropertyIDs VARCHAR(1000)

SET @StrPropertyIDs = '419,429,459'

DECLARE @TblPropertyID TABLE
(
property_id varchar(100)
)

INSERT INTO @TblPropertyID(property_id)

select x.Item
from dbo.SplitString(@StrPropertyIDs, ',') x

select *
from vw_nfpa_firstArv_RPT
where property_use IN
(
SELECT property_id
FROM @TblPropertyID
)

标签: sql-server-2012

解决方案


如果可能的话,最好的长期策略是远离 SQL 表中的 CSV 数据。作为这里的快速修复,我们可以尝试使用索引创建表变量property_id

DECLARE @TblPropertyID TABLE (
    property_id varchar(100) INDEX idx CLUSTERED
);

这将使WHERE IN您的查询子句更快,尽管我们可以尝试使用以下方法重写它EXISTS

SELECT *
FROM vw_nfpa_firstArv_RPT t1
WHERE EXISTS (SELECT 1 FROM @TblPropertyID t2
              WHERE t2.property_id = t1.property_use);

请注意,这仅适用于 SQL Server 2014 或更高版本。


推荐阅读