C# 优化复杂查询

C# 优化复杂查询,c#,tsql,query-optimization,C#,Tsql,Query Optimization,我有一个查询,它通过某个id合并表 选择(按PagedOptionData1.ExternalId ASC排序)上方的行数(), PagedOptionData1.RunDateTime描述 )作为行号, PagedOptionData1.*, PagedOptionData2* 从PagedOptionData作为PagedOptionData1 左外部联接PagedOptionData为PagedOptionData2 在PagedOptionData1.ExternalId=PagedOp

我有一个查询,它通过某个id合并表

选择(按PagedOptionData1.ExternalId ASC排序)上方的行数(),
PagedOptionData1.RunDateTime描述
)作为行号,
PagedOptionData1.*,
PagedOptionData2*
从PagedOptionData作为PagedOptionData1
左外部联接PagedOptionData为PagedOptionData2
在PagedOptionData1.ExternalId=PagedOptionData2.ExternalId
和PagedOptionData2.rn=2
其中PagedOptionData1.rn=1
其中PagedOptionData是具有各种联接的临时表


这个查询可以优化吗?

这个查询看起来并不复杂,因此如果运行缓慢,应该通过添加索引来进行优化。Sql Server可以建议添加索引

  • 将查询粘贴到新的Sql Management Studio窗口中
  • 单击工具栏中的“包含实际执行计划”按钮
  • 运行查询
  • 检查返回的执行计划以获得索引建议(在查询的正下方以绿色文本显示)
  • 创建索引并重试

  • 无论您是使用原始表单还是我的建议,都需要
    (ExternalId ASC,RunDateTime DESC)
    上的索引

    有一点很突出:在同一个表上使用SELECT*两次时,如何消除列名中的歧义

    为了避免有序列访问和简化查询,我将考虑重写:

    SELECT TOP 2
       *
    FROM
       PagedOptionData
    ORDER BY
       ExternalId ASC, RunDateTime DESC
    

    这大大简化了事务,但牺牲了客户机代码中的更多逻辑

    每天的第一个订单,是否需要对其进行优化?为什么对你来说太慢了?它需要多长时间才能执行?它是否会给您带来问题?我注意到的第一件事是您使用
    *
    。是否需要选择每一列?如果不是,请明确指定所需的查询。将主题更改为:“SQL 101:优化普通查询”。如果这很复杂,当你第一次看到一个复杂的4页打印的查询时,你的大脑可能会爆炸。你所说的短语
    是什么意思,其中PagedOptionData是一个具有各种连接的临时表。
    。这似乎没有道理。
    PagedOptionData
    是否定义为通用表表达式?如果是,请给出该定义。