我有一个6700个ID的列表,存储在Excel文件中,我想在数据库中搜索。我有这样的查询:
select distinct RespondentID, QuestionID,Condition
from RespondentProfiles (nolock)
where RespondentID in (10286334,13988335, 18834444,26134155, 8658775)
and QuestionID in (113)
我的ID是上面的RespondentID,它们看起来像这样:
10286334,
13988335,
18834444,
26134155,
8658775,
1616806,
3470656,
30981782,
29302573,
29043779,
12899462,
7420528,
17040183,
26129711,
19542507
Excel表示它可以保存为以逗号分隔的值。但我无法做到这一点(即我想要一个包含所有值的文本文件,以逗号分隔)然后我会剪切&粘贴到查询中。哪个看起来有点难看,毫无疑问,但我认为这是可行的,还是太慢了?
谢谢!
答案 0 :(得分:1)
嗯 - 对于ID列表,没有其他方法可以选择加载它们
如果问题是速度 - 那么它将与索引允许的速度一样快。 RespondentID是群集密钥/索引吗?
如果是这样,它应该不会太糟糕,因为它只是一个索引搜索的负载 - 聚集索引(如果是一个)应该覆盖此查询
答案 1 :(得分:1)
在上面的查询中,如果您将QuestionID编入索引,则服务器将使用索引查找QuestionID为113的行。然后,它将扫描QuestionID为113的所有行,并使用二进制搜索查看RespondentID是否在ID列表中。
因此,如果有100行,其中QuestionID为113,它将扫描所有100行,但不扫描整个数据集。
您可以使用覆盖索引加快速度,以便服务器使用索引扫描而不是表扫描。只需按顺序在QuestionID,RespondentID和Condition上创建一个复合“覆盖”索引。
覆盖索引的大小可能会有一些限制,具体取决于列的大小。如果您发布架构,我们可以提供更详细的答案。