在where条件中使用IN子句的索引

时间:2019-10-29 14:57:06

标签: sql-server indexing

我的应用程序访问SQL Server中的表中的数据。考虑表名称为PurchaseDetail以及其他一些列。 select查询具有以下where子句。 1.名称-名称只有10000个值。 2. createdDateTime

实际查询是

select *
from PurchaseDetail
where name in (~2000 name)
and createdDateTime = 'someDateValue';

SQL调整顾问提供了一些建议。我尝试使用那些推荐的索引。性能有所提高,但并没有完全提高。

查询中是否有错误?或可以更改/改善我的选择查询吗? 因为我之前没有在where子句中使用IN。我的表有超过1亿条记录。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

在这种情况下,对大量数据使用IN根本不好。 最好的方法是改用INNER JOIN。 如果将这些名称插入到临时表中,然后通过INNER JOIN查询对其进行SELECT,那就更好了。