我有一个sql表,它有大约6,000条记录,每条记录有17列。如果我在表上进行基本搜索(即从table_Orders中选择*),则需要1.5分钟才能返回所有记录!我使用此表运行的任何查询也非常慢。我已经重新编制了表格,因此碎片不是问题。该表中有2个nvarchar(max)列,用于存储xml数据。返回没有这些列的表非常快(不到1秒)。所以,我猜测它是阻碍查询的xml数据。有什么办法可以加快利用xml列的查询的性能吗?任何见解将不胜感激。我通常不在sql中使用xml,所以我甚至不知道从哪里开始。
答案 0 :(得分:1)
这听起来像网络速度而不是搜索时间。即使是6000行的表扫描也只需要几分之一秒 - 来搜索所有行。将这些行返回给客户但是......您正在下载所有这些数据,因此当您检索到大量数据时,您将会看到差异。这与"查询性能"无关。除非您能够更快地建立网络或提供更少的数据,否则您无法做任何事情。
您可以通过发出搜索聚簇索引中的键的查询来对此进行测试。假设你在RowID上有一个聚集索引...
select RowId, NonXmlColumn where RowId = 3 -- or some other reasonable key
select RowId, XmlColumn where RowId = 3
这些查询的搜索时间将相同。因此,速度的任何差异都可归因于网络。
答案 1 :(得分:0)
我不会将这些数据存储在表格中。如果我这样做,我就不会存入VARCHAR
。听起来不像混蛋。
SQL Server有xml
数据类型:http://msdn.microsoft.com/en-us/library/hh403385.aspx
它说有限制。您应该看到适用于您的方案的内容。
如果您需要保留XML - 将其粘贴到其他地方并从中拉出您需要搜索的字段。