获取8101行值的最快方法是什么?

时间:2016-04-06 05:00:35

标签: sql sql-server vb.net tsql

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上连接所有并且存储过程只返回一个长字符串?这会更快吗?

2 个答案:

答案 0 :(得分:3)

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

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。

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

答案 1 :(得分:2)

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

所以,没有。

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

我看到的一个错误代码实际上是这样的:

  

strResult + =" {label:'" + dr(" AirportName")+"'价值:'" +   博士(" AirportCode")

这在2个级别中很糟糕。

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

  • 不要像这样把字符串放在一起。将StringBuilder放在适当大小的位置。你分配一串TON只是为了扔掉它们。

上次我做了像我这样的翻版,我在半秒钟内读了50万条词典,所以SQL不是你的问题。但你的VB代码很草率。

如果您通过非常远程服务器的网络连接进行连接 - 如果不添加Web服务,则可以做很多事情。