【发布时间】:2013-11-18 20:40:20
【问题描述】:
几周以来,我一直在努力解决查询性能问题。在这一点上,我已经完全排除了查询中关于 JOIN 类型、索引、保持统计信息最新等方面的所有内容......但后来我偶然发现了一些东西。
一点背景。
有问题的表代表Record
Id INT PK
Name NVARCHAR(50)
Status INT FK
Created DATETIME
Version NVARCHAR(10)
Data XML
在进行了一些性能基准测试后,我意识到在选择中包含最后一列远远超过索引、连接复杂性和网络考虑因素等因素 10 倍到 20 倍之间。
以下比较是在连接到 SQL Azure 的本地开发机器上的 SSMS 之间进行的。
SELECT Id FROM Records -- ~10 secs for 300,000 rows
SELECT Id, Name, Status, Created, Version FROM Records -- ~20 sec for 300,000 rows
SELECT * FROM Records -- ~350 sec for 300,000 rows
需要明确的是,我并没有对 xml 列(XML DML 或 XPath 查询)做任何疯狂的事情。只需简单地从选择中包含/排除它。
此时,我想我已经通过创建RecordLight 实体、NHibernate 地图和 MVC 控制器堆栈解决了我的问题,纯粹是为了在我们的应用中搜索和列出。
但我想了解为什么包含 XML 列会对查询性能产生如此负面的影响
【问题讨论】:
标签: sql sql-server performance azure-sql-database xml-column