Sql 优化:Xml 或分隔字符串

2024-04-10

希望这只是一个简单的问题,涉及 Sql 2008 中的查询时的性能优化。

我曾在一些公司工作过,这些公司在 ETL 流程以及一些网站中大量使用存储过程。我见过这样的场景:他们需要根据一组有限的键值检索特定记录。我已经看到它以 3 种不同的方式处理,通过下面的伪代码进行说明。

连接字符串并执行它的动态 Sql。

EXEC('SELECT * FROM TableX WHERE xId IN (' + @Parameter + ')'

使用用户定义的函数将分隔字符串拆分到表中

SELECT * FROM TableY INNER JOIN SPLIT(@Parameter) ON yID = splitId

使用 XML 作为参数而不是分隔的 varchar 值

SELECT * FROM TableZ JOIN @Parameter.Nodes(xpath) AS x (y) ON ...

虽然我知道由于多种原因在第一个片段中创建动态 sql 是一个坏主意,但我的好奇心来自最后两个示例。在我的代码中进行尽职调查以通过 XML 传递此类列表(如代码片段 3 所示)是否更熟练,或者仅分隔值并使用 udf 来处理它更好?


现在有第四个选择 -表值参数 http://msdn.microsoft.com/en-us/library/bb510489.aspx,实际上您可以将值表作为参数传递给存储过程,然后像通常使用表变量一样使用它。我更喜欢这种方法而不是 XML(或 CSV 解析方法)

我无法引用所有不同方法之间的性能数据,但这是我会尝试的一种方法 - 我建议对它们进行一些实际的性能测试。

Edit:
关于 TVP 的更多内容。为了将值传递到存储过程中,您只需定义一个 SqlParameter (SqlDbType.Structured) - 其值可以设置为任何 IEnumerable、DataTable 或 DbDataReader 源。因此,大概您已经在某种列表/数组中拥有了值列表 - 您无需执行任何操作即可将其转换为 XML 或 CSV。

我认为这也使得存储过程更清晰、更简单、更可维护,提供了一种更自然的方式来实现最终结果。要点之一是 SQL 在基于集合/非循环/非字符串操作活动中表现最佳。

这并不是说它在传入大量值时会表现出色。但是对于较小的值集(最多约 1000),它应该没问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sql 优化:Xml 或分隔字符串 的相关文章

随机推荐

  • 如何从自定义视图中访问layout_height?

    我有一个自定义视图 我只是希望访问 xml 布局值layout height 我目前正在获取该信息并将其存储在 onMeasure 期间 但这仅在首次绘制视图时发生 我的视图是 XY 图 它需要尽早知道其高度 以便可以开始执行计算 该视图位
  • 悬停在父 div 上时更改子 div 的背景颜色吗? [复制]

    这个问题在这里已经有答案了 我想在父 div 悬停时更改子 div 的背景颜色 目前 我可以更改颜色 但只能将鼠标悬停在子 div 上 但是 我也想更改父 div 悬停时的颜色 div class content div class log
  • 如何使用 Selenium Safari Webdriver

    我正在尝试使用 Safari WebDriver 并且按照说明进行操作here https code google com p selenium wiki SafariDriverInternals构建 Safari 驱动程序 但现在我不知
  • 稍后如何在 SwiftUI 中访问内容视图的元素?

    假设我有一个像这样的内容视图 struct ContentView View State private var selection 0 var body some View TabView selection selection Cust
  • 不确定 openmp 循环中应该共享或私有什么

    我有一个更新矩阵 A 的循环 我想将其设为 openmp 但我不确定哪些变量应该共享和私有 我本以为只有 ii 和 jj 就可以工作 但事实并非如此 我想我也需要在某个地方进行 OMP ATOMIC UPDATE 该循环仅计算 N 和 N
  • 为什么我收到“参数从未使用过 [E0392]”?

    我正在尝试用 Rust 实现八叉树 八叉树在类型上是通用的 但有一个约束 即它应该实现通用特征 pub trait Generable u fn generate children self data U gt Vec u
  • QGraphicsItem移动事件-获取绝对位置

    我有一个QGraphicsEllipseItem我想要移动并在移动时触发信号 所以我子类化了QGraphicsEllipseItem and QObject并覆盖了itemChange方法来触发信号 这一切似乎都有效 但报告的位置似乎与该项
  • TWA - 数字资产链接正常,但地址栏仍然可见

    我开发了一个渐进式 Web 应用程序 我想将其作为可信 Web 活动在 Play 商店中发布 它是https www bagnoadriatico it https www bagnoadriatico it 遵循本指南https deve
  • 后退按钮文本没有改变

    对于我的视图控制器之一 扩展 UITableViewController 我需要将其后退按钮文本配置为 后退 但后退按钮仍然显示父视图控制器的标题 默认 void viewDidLoad self navigationItem backBa
  • Windows 编译器上的 timespec

    在 posix 上 可以使用 timespec 来计算准确的时间长度 如秒和毫秒 不幸的是 我需要使用 Visual Studio 编译器迁移到 Windows VS time h 库没有声明 timespec 所以我正在寻找其他选项 就搜
  • 企业库验证块的 Asp.Net MVC 2 客户端验证实现

    我找到了一个非常好的文章 http bradwilson typepad com blog 2009 10 enterprise library validation example for aspnet mvc 2 html关于如何在 M
  • TCP 代理:在后端不可用时保持连接

    在 Docker 设置的上下文中 我想使用类似大使的模式来允许某些容器 例如数据库服务器 正常重新启动 而不必重新启动所有依赖的容器 例如 Web 服务器 并且没有错误消息 因为 数据库服务器不可用 因此 我想知道 是否有一个 TCP 代理
  • Android - 在运行时更改自定义标题视图

    我在应用程序中为每个活动使用自定义标题视图 在其中一项活动中 根据按钮点击 我需要更改自定义标题视图 现在 每次我调用 setFeatureInt 时 这都可以正常工作 但是 如果我尝试更新自定义标题中的任何项目 例如更改标题上的按钮文本或
  • Swift 3 需要更多信息来推断参数?

    我有一个向上冒泡的延伸部分 但在 Swift 3 中 无法推断通用参数 T public extension UIResponder public func next
  • QCustomPlot - 在 QCPAxisRect 上显示 customPlot 下方的项目

    在一个类似的项目中QCustomPlot 财务演示 http qcustomplot com index php demos financialchartsdemo我不仅想在图表区域中绘制一个 QCPItemRect 还想在图表下方的区域中
  • django:在多表继承中遵循向后到子类的关系

    我欢迎任何有关我的问题的帮助 我试图在多表继承情况下将关系向后跟踪到子类 IE 我想要一个特定州所有餐馆的查询集 这是我的问题的一个简化示例 对 django 文档中的eg进行修改 from django db import models
  • 如何获取 PHP 中的 Subversion 修订号?

    我想让我的 PHP 应用程序标有它使用的修订号 但我不想使用巡航控制 http en wikipedia org wiki CruiseControl或每次更新文件并上传 我该怎么做呢 SVN关键字并不是一个好的解决方案 正如其他人指出的那
  • 使用 javascript 创建一个新的空文档

    我正在使用一些非常不直观的 xml 所有标签都是 TX H VC 我想复制这些数据 但将所有标签重命名为它们的实际含义 我可以创建一个新的空文档来放入新的 命名良好的标签吗 我试过这个 doc new DOMParser parseFrom
  • Android:如何将先前的 Activity Intent 传递到列表视图中

    我有两项活动 Activity A Activity B In Activity A我有一个EditText Button and Image View And in 活动B我有一个Listview和 listView 视图包含 Custo
  • Sql 优化:Xml 或分隔字符串

    希望这只是一个简单的问题 涉及 Sql 2008 中的查询时的性能优化 我曾在一些公司工作过 这些公司在 ETL 流程以及一些网站中大量使用存储过程 我见过这样的场景 他们需要根据一组有限的键值检索特定记录 我已经看到它以 3 种不同的方式