从庞大的数据库中选择id

时间:2013-03-15 10:24:04

标签: c# sql sql-server

我有一个包含超过3,000,000行的数据库,每个行都有一个带varchar(6000)的id和xml字段。

如果我SELECT id FROM bigtable,则需要+ - 2分钟才能完成。有没有办法在30秒内得到这个?

5 个答案:

答案 0 :(得分:3)

在id列上构建聚簇索引

请参阅http://msdn.microsoft.com/en-us/library/ms186342.aspx

答案 1 :(得分:2)

您可以将索引应用于表格。在您的情况下是聚集索引。

聚集索引:

http://msdn.microsoft.com/en-gb/library/aa933131(v=sql.80).aspx

我还建议过滤您的查询,以便每次都不会返回所有300万行,这可以通过TOPWHERE来完成。

热门:

SELECT TOP 1000 ID
FROM bigtable

<强>其中:

SELECT ID FROM
bigtable
WHERE id IN (1,2,3,4,5)

答案 2 :(得分:0)

首先,3百万张唱片不能制作一张桌子'巨大'。

要优化查询,您应该执行以下操作。

  
      
  1. 过滤您的查询,为什么需要获取所有ID?
  2.   
  3. 为ID列创建聚簇索引,以便在指向所选行之前先获取较小的查找表进行搜索。
  4.   

有用的帖子,herehere

答案 3 :(得分:0)

好的,为什么要将所有Id重新调回客户端?

即使您的表没有聚集索引(我怀疑),绝大多数处理时间都是客户端,通过网络传输Id值并在屏幕上显示。

查询所有值而非忽略了拥有查询引擎的意义。


我能想到(或许我缺乏想象力)获得所有Id s的唯一原因是某种被误导的缓存。

如果你想了解很多你做过的事

SELECT count(*) FROM [bigtable]

如果您想知道Id是否存在

SELECT count([Id[) FROM [bigtable] WHERE [Id] = 1 /* or some other Id */

这将返回1行,其中1或0表示存在指定的Id

这两个查询都将从Id上的聚簇索引中大量受益,并将返回具有最大信息的最小数据。

这两个查询都将在不到30秒的时间内返回,如果您在Id上有聚簇索引,则会在不到30毫秒的时间内返回

选择所有Id将不会提供比这些查询更多的有用信息,它所能实现的只是为您的网络和客户提供锻炼。

答案 4 :(得分:0)

你可以index获得更好的表格。

您还可以使用其他选项来改善partion功能等性能。