【问题标题】:Improve performance of select statement without WHERE and JOIN在没有 WHERE 和 JOIN 的情况下提高 select 语句的性能
【发布时间】:2016-04-07 08:55:00
【问题描述】:

我有一个表 ABC,其记录总数在 100000 到 150000 左右。 我想在 10 到 15 秒内获取所有列的所有记录。 有没有可能这样做?

我已经尝试过使用视图或临时表,但加载需要 47 秒。

DECLARE TABLE TABLE(Business varchar(1000), Practice varchar(1000),
Location varchar(1000), ProviderName varchar(1000),
InsuranceName varchar(200), CustName varchar(100), ChartNo varchar(200),
ClaimId bigint, ClaimSubmissionDate varchar(100), DOS DateTime,
Modifiers varchar(200), CPT varchar(200), CPTCat varchar(1000),
Unit varchar(200), chargeamount int, chargepostingdetailid bigint)

【问题讨论】:

  • 获得更快的硬件...
  • 哦!谢啦!但是除了硬件,还有可能吗? 30 秒?
  • 向我们展示表定义、示例表数据等。请注意,这可能是传输大量数据的问题——这有点难以加速。 (缓冲区大小等可能会有所改善。)
  • DECLARE ABC TABLE(Business varchar(1000),Practice varchar(1000),Location varchar(1000),ProviderName varchar(1000),InsuranceName varchar(200),CustName varchar(100),ChartNo varchar (200),ClaimId bigint,ClaimSubmissionDate varchar(100),DOS DateTime,Modifiers varchar(200),CPT varchar(200),CPTCat varchar(1000),Unit varchar(200),chargeamount int,chargepostingdetailid bigint)
  • 你检查执行计划了吗?并行性是否适用于您的查询?

标签: sql sql-server performance query-performance


【解决方案1】:

好吧,由于您此时的问题非常模糊......我建议将查询拆分为并行查询(假设瓶颈不在数据库上)。

Parallel.ForConcurrentBag 结合使用。

每个“循环”都在加载 5000 左右的例子,“玩”这些数字,看看是否有任何区别。

【讨论】:

  • 感谢您的回复。我同意你使用并行。但我必须将此 SQL 语句用于 SSRS 报告。这是主要问题。因为我必须将所有这些数据传输到 SSRS,SSRS 会对它进行分页,然后报告就会出现。
  • 当我说并行是加载所有 100000 到 150000 个条目,但每个查询只加载一定数量,然后将每个查询结果(如分页查询)添加到最终列表(concurrentBag)中。加载所有内容后,将完整列表传递给您的消费者对象。
【解决方案2】:
  1. 在服务器计算机上运行您的客户端。如果您需要 SQL Server Management Studio 或仅在服务器上运行您的应用程序,则可以使用 RDP 会话。

  2. 在数据库连接中为网络协议使用共享内存。见这里:Fastest SQL Server protocol?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多