我们正面临以下问题,我们正在努力提出最佳解决方案。
我们使用的是 SQL Server 2008。我们有一个包含 6 亿多条记录的表,大约有 25 列。其中一列是一个 ID,并已编入索引。我们需要从该表中获取记录的子集。主要有2种情况:
a) 子集包含 1000 到 2 亿行之间的任何地方;要获取的行的 ID 存储在 SQL Server 的索引表中;
b) 子集包含少于 100 万行;要获取的行的 ID 存储在应用程序的服务器内存(.NET Web 应用程序)中。
我们的挑战是尽快获得这个子集。我们确实需要这在几秒钟内发生。
到目前为止我们的解决方案:
a)我们在两个表之间进行连接。这行得通,但这还不够快。查询看起来像SELECT * FROM Big_Table JOIN IndexTable ON Big_Table.ID = IndexTable.ID
.
b) 我们并没有真正的解决方案。我们尝试运行 WHERE IN 查询,但如果子集接近百万行 ( SELECT * FROM Big_Table WHERE ID IN (ID1, ID2, ID3...)
),这将永远耗时。一种解决方案可能是将索引存储在临时表中,但随后又回到案例 a。
我们正在尝试尽可能地优化 SQL Server,特别是使用良好的索引和分区。我今天更多地询问您认为最好的方法是在两种情况下(a 和 b)提取子集。
任何想法或建议表示赞赏。
谢谢