-1

我有一个包含 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 说它可以保存为逗号分隔的值。但我无法做到这一点(即我想要一个包含所有值的文本文件,以逗号分隔)然后我将剪切并粘贴到查询中。毫无疑问,这看起来有点难看,但我认为这是可行的,还是太慢了?

谢谢!

4

2 回答 2

1

好吧 - 对于 ID 列表,实际上没有其他方法可以挑选其中的一部分

如果问题是速度——那么它的速度将与索引允许的一样快。RespondentID 是聚集键/索引吗?

如果是这样,它应该不会太糟糕,因为它只是索引搜索的负载 - 并且聚集索引(如果它是一个)应该涵盖这个查询

于 2012-07-10T15:32:18.080 回答
1

在上面的查询中,如果您有 QuestionID 索引,服务器将使用索引查找 QuestionID 为 113 的行。然后它将扫描 QuestionID 为 113 的所有行,并使用二进制搜索查看 RespondentID 是否在 ID 列表中。

因此,如果有 100 行 QuestionID 为 113,它将扫描所有 100 行,但不会扫描整个数据集。

您可以使用覆盖索引来加速此操作,以便服务器使用索引扫描而不是表扫描。只需按顺序在 QuestionID、RespondentID 和 Condition 上创建复合“覆盖”索引。

There may be some limitation on the size of the covering index, depending on the size of the columns. If you post your schema, we can provide more detailed answers.

于 2012-07-10T15:41:10.067 回答