给定一个像这样的表
CREATE TABLE [dbo].[Article](
[Id] [int] NOT NULL,
[CategoryId] [int] NOT NULL,
[Text] [nchar](10) NOT NULL)
用户可以选择他们想要查看数据的一个或多个类别。通常他们会选择 1-20 个类别。为了适应这一点,我生成类似于以下内容的参数化查询:
SELECT * FROM Article
WHERE CategoryId IN (@c1, @c2, @c3, @c4, @c5)
然而,在一些罕见的用例中,用户可以合法地选择数百个类别。这让我发现了 Linq-to-Entities 的局限性,我通过形成类别代码范围 https://stackoverflow.com/q/14945983/141172。不幸的是,这只能解决这个问题,因为可以传递到 SQL Server 的查询的大小是有限的。
我想重构这个查询以避免任何硬限制。我的第一个想法是创建一个包含所请求类别的临时表,并对该临时表执行内部联接来代替IN(...)
条款。但是,我知道临时表可能会非常慢。
对于这个问题是否有更优雅和/或性能更好的解决方案?
您的第一直觉是正确的,尽管您可能会发现表值变量足以代替临时表。不要担心这种情况下的性能;这不会有什么重大意义。如果需要,总是可以在临时表上创建索引,但这似乎不太可能。 CategoryId 字段有索引吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)