【发布时间】:2019-10-29 14:57:06
【问题描述】:
我的应用程序从 SQL Server 中的表访问数据。考虑表名是 PurchaseDetail 和其他一些列。 选择查询具有以下 where 子句。 1. 名称 - 名称只有 10000 个值。 2. 创建日期时间
实际查询是
select *
from PurchaseDetail
where name in (~2000 name)
and createdDateTime = 'someDateValue';
SQL 调优顾问给出了一些建议。我尝试了那些推荐的索引。性能略有提升,但并不完全。
我的查询有什么问题吗?或者是否有可能更改/改进我的选择查询? 因为我之前没有在 where 子句中使用 IN。我的表有超过 1 亿条记录。
有什么建议吗?
【问题讨论】:
-
使用带有 2,000 个值列表的
IN将是一个杀手。似乎您最好使用表值参数和JOIN。 -
另外,如果您使用
SELECT *,唯一有用的索引是CLUSTERED INDEX,或包含表中每一列的NONCLUSTERED索引(在索引本身,或作为INCLUDE列)。如果您不需要每一列,请不要返回每一列。
标签: sql-server indexing