对比XML AUTO与T-SQL命令(下)

日期: 2009-10-21 作者:Michelle Gutzait翻译:张峰 来源:TechTarget中国 英文

XML Auto处理比较少的数据

  我将使用同一个表做同样的测试,只是读取更少的数据。

  首先,我将在ID列上创建一个索引:

  Ø create unique clustered index UQ_Employes on Employes (id)

  然后,我用WHERE子句查询此表,先查询100条记录,然后查询1000条记录:

  100条记录如下:

  SELECT * FROM Employes where id between 5000 and
  5100
  go
  SELECT * FROM Employes where id between 5000 and
  5100
  FOR XML AUTO
  go
  SELECT * FROM Employes where id between 5000 and
  5100
  FOR XML AUTO, TYPE
  go
  SELECT * FROM Employes where id between 5000 and
  5100
  FOR XML AUTO, TYPE, ELEMENTS
  go
  SELECT * FROM Employes where id between 5000 and
  5100
  FOR XML AUTO, TYPE, ELEMENTS, ROOT
  go

  SQL Profiler显示这些命令的使用没有实质差别:

  同样,没有创建工作表,且所有的命令有着相同数量的工作:

  Table ‘Employes’. Scan count 1, logical reads 12, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Employes’. Scan count 1, logical reads 12, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Employes’. Scan count 1, logical reads 12, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Employes’. Scan count 1, logical reads 12, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Employes’. Scan count 1, logical reads 12, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.

  执行计划同样也显示了相同的工作量:

  1000条记录:

  SELECT * FROM Employes where id between 5000 and
  6000
  go
  SELECT * FROM Employes where id between 5000 and
  6000
  FOR XML AUTO
  go
  SELECT * FROM Employes where id between 5000 and
  6000
  FOR XML AUTO, TYPE
  go
  SELECT * FROM Employes where id between 5000 and
  6000
  FOR XML AUTO, TYPE, ELEMENTS
  go
  SELECT * FROM Employes where id between 5000 and
  6000
  FOR XML AUTO, TYPE, ELEMENTS, ROOT
  go

  SQL Profiler:

  I/O统计:

  Table ‘Employes’. Scan count 1, logical reads 87, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Employes’. Scan count 1, logical reads 87, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Employes’. Scan count 1, logical reads 87, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Worktable’. Scan count 0, logical reads 7, physical
  reads 0, read-ahead reads 0, lob logical reads 5222, lob
  physical reads 0, lob read-ahead reads 242.
  Table ‘Employes’. Scan count 1, logical reads 87, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Worktable’. Scan count 0, logical reads 7, physical
  reads 0, read-ahead reads 0, lob logical reads 5229, lob
  physical reads 0, lob read-ahead reads 245.
  Table ‘Employes’. Scan count 1, logical reads 87, physical
  reads 0, read-ahead reads 0, lob logical reads 0, lob physical
  reads 0, lob read-ahead reads 0.
  Table ‘Worktable’. Scan count 0, logical reads 7, physical
  reads 0, read-ahead reads 0, lob logical reads 5229, lob
  physical reads 0, lob read-ahead reads 245.

  执行计划:

  何时使用工作表?

  在优化器中使用工作表有何限制呢?这取决于优化器处理内存的工作量及XML分析器中的数据量。我的查询返回的XML被存储在内存中的一个大的XML变量中。以上限制不是一个明确的数据。SQL Server Developer Center的技术人员表示:“XML类型的变量和参数可达2GB。数据量小的时候,它们使用主存,但是,大数据量时被存储在tempdb中”。

  结论:

  XML数据和函数比标准的T-SQL要使用更多的资源。因此,如果查询处理大量数据时或XML函数更加复杂,就考虑在数据库级别上使用标准的T-SQL。通常建议大家测试XML性能,来确保在数据库中使用XML不会降低应用的性能。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

翻译

张峰
张峰

相关推荐