gpt4 book ai didi

sql-server - 通过具有索引的多列之一进行选择

转载 作者:行者123 更新时间:2023-12-02 04:51:22 25 4
gpt4 key购买 nike

我有这张表:

    CREATE TABLE [Person].[Address](
[AddressID] [int] NOT NULL,
[AddressLine1] [nvarchar](60) NOT NULL,
[StateProvinceID] [int] NOT NULL,

CONSTRAINT [PK_Address_AddressID] PRIMARY KEY CLUSTERED
(
[AddressID] ASC
)
)
GO

有了这个额外的非聚集索引。

    CREATE UNIQUE NONCLUSTERED INDEX [IX_Address_AddressLine1_StateProvinceID 
ON [Person].[Address]
(
[AddressLine1] ASC,
[StateProvinceID] ASC,
)
GO

我正在使用现有的应用程序代码。该应用程序将向我的查询传递两个参数,但其中一个可能等于“-1”。如果这样做,目的是匹配该参数的所有行。

当前查询如下所示:

    Select AddressID, AddressLine1, StateProvinceID
From Person.Address
Where ((AddressID = @AddressID) or (@AddressID=-1))
and ((StateProvinceID = @StateProvinceID) or (@AddressID=-1))

这会返回当@AddressID 或@StateProvinceID 等于'-1'时所需的数据,它本质上是忽略(-1=-1 返回TRUE)

问题是索引。当我这样做时,它会进行扫描,而不是搜索。

这将返回一个搜索:

    Select AddressID, AddressLine1, StateProvinceID
From Person.Address
Where AddressID = @AddressID
and StateProvinceID = @StateProvinceID

...虽然当前查询的扫描速度要慢得多。

第二个查询很快,但没有按我需要的方式工作。

有没有办法允许绕过一个或另一个参数,同时仍然使用索引查找?

最佳答案

在您的 sql 命令 (link) 中使用 CASEWHENTHEN。希望对您有所帮助。

关于sql-server - 通过具有索引的多列之一进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com