【问题标题】:Fastest way to get 8101 row values?获取 8101 行值的最快方法?
【发布时间】:2016-04-06 05:00:35
【问题描述】:

https://jsfiddle.net/mgjftrdz/1/,而不是以下值:

var availableTags = [
     {label: 'honey', value: 1},
     {label: 'apples', value: 2},
     {label: 'milk', value: 3},
     {label: 'tea', value: 4},

我想像这样列出 AirportNames 和 AirportCodes:

 var availableTags = [
         {label: 'LAX - Los Angeles Airport', value: 'LAX'},
         {label: 'JFK - John F Kennedy Airport', value: 'JFK'},
         {label: 'LHR - London Heathrow Airport', value: 'LHR'},
         etc

我有一个包含 8101 行 tblAirportNamesAndCodes 的表。

而不是在 VB.NET 中执行 SqlDataReader 循环,例如:

    Try
        sqlConnection1.Open()
        dr = cmd.ExecuteReader
        While dr.Read()
            strResult += "{label: '" + dr("AirportName") + "' value: '" + dr("AirportCode") +"'}," 

        End While

在 T-SQL 中是否有一种方法可以在 SQL Server 上进行所有连接并让存储过程只返回一个长字符串?这会更快吗?

【问题讨论】:

  • 你指的是什么版本的SQL server?
  • 你知道asp.net webapi会序列化为json吗?查询数据库并向客户端吐出 json 非常简单。 stackoverflow.com/questions/35437032/…
  • SQL 2012。感谢大家的 cmets 和回复。不过,我刚刚有了另一个想法。由于表格是相当静态的,我可以创建一些 vb.net 代码来生成包含这些项目的一次性静态 js 文本文件 (lookup-codes.js),例如var availableTags = [{label: 'honey', value: 1}, {label: 'apples', value: 2} 等并保存。然后只需从该网页引用它作为脚本引用 .js。这样就不需要任何 SQL 服务器调用。

标签: sql sql-server vb.net tsql


【解决方案1】:

您可以将此查询作为起点:

declare @t as varchar(max)

select @t = coalesce(@t + ',
' + name, name) from syscolumns option (maxdop 1)

select @t

但我建议您在 .NET 代码中保留格式化逻辑,而不是将其移至 T-SQL。在您的情况下几乎看不到性能差异,但是如果没有 SQL 内部的格式化逻辑,您的代码将更易于维护。

UPD:同意 @TomTom 关于 StringBuilder。

附:此示例中的选项 (maxdop 1) 仅用于保持复杂查询的行顺序。

【讨论】:

  • 谢谢,知道我是否真的这样做会很有帮助。
【解决方案2】:

是的。不要优化错误的元素。

所以,不。

说真的,如果您在传输大约 8000 条小行时遇到问题,那么您要么拥有一个完全糟糕的 sql 服务器(比我的旧手机还小),要么通过慢速连接(互联网)传输它们。在这两种情况下,SQL 都不是您的问题(第二,请在 SQL Server 前面放置一个 Web 服务)。

我看到的一个糟糕的代码实际上是这样的:

strResult += "{label: '" + dr("AirportName") + "' value: '" + 博士(“机场代码”)

这在 2 个级别上很糟糕。

  • 它进行字典查找。在循环之前获取字段的索引,然后由它们访问(即'dr(0)')。优化了这一点。

  • 不要像这样把字符串放在一起。将一个大小合适的 StringBuilder 放在那里。你分配了大量的字符串只是为了把它们扔掉。

上次我做这样的事情时,我在半秒内将 50 万个条目读入字典,所以 SQL 不是你的问题。但是你的VB代码很草率。

如果您通过网络连接从一个非常远程的服务器中提取它 - 如果不添加 Web 服务,您将无法做很多事情。

【讨论】:

  • 感谢您的这些优点。我认为我曾经遇到过 100,000 行的性能问题实际上是 VB.NET 循环,而不是您提到的 SQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多