【问题标题】:How to handle heavy query as light and fast version?如何将繁重的查询处理为轻量级和快速版本?
【发布时间】:2016-10-28 14:02:54
【问题描述】:

我一直在使用 Fetch Next(而不是 linq 查询 skip.take()),但下面的查询非常慢,我该如何处理这个慢查询。我想让它更快。

如何重写这个sql查询和linq版本(如果更快的话)

var ciftciDestekler = ctx.tblDestek.SqlQuery(
    " select d.ParselId,d.DestekId,d.Urun,d.KullanimSekli,d.TarimSekli,d.EkiliAlan,d.DesteklenenAlan,d.Aciklama,d.TarifeId,d.VeriSurumu "+
    "from tblCiftci c "+
    "inner join  tblParsel p  on c.CiftciId = p.CiftciId "+
    "inner join tblDestek d on p.ParselId = d.ParselId where c.UretimSezonu = 2016 "+
    "order by d.DestekId "+
    "OFFSET 0 ROWS -- skip 10 rows "+
    "FETCH NEXT 10 ROWS ONLY; --").ToList();  

【问题讨论】:

    标签: c# sql sql-server performance linq


    【解决方案1】:

    我想指出您的查询不只选择 10 行 - 它选择所有行,因为 FETCH NEXT 部分是可选的,而您的 commented it out 带有“--跳过10 行”。

    您的查询是一个巨大的单行,没有换行符,所以实际上不是:

    select d.ParselId,d.DestekId,d.Urun,d.KullanimSekli,d.TarimSekli,d.EkiliAlan,d.DesteklenenAlan,d.Aciklama,d.TarifeId,d.VeriSurumu 
    from tblCiftci c 
    inner join  tblParsel p  on c.CiftciId = p.CiftciId 
    inner join tblDestek d on p.ParselId = d.ParselId where c.UretimSezonu = 2016 
    order by d.DestekId 
    OFFSET 0 ROWS -- skip 10 rows 
    FETCH NEXT 10 ROWS ONLY; --
    

    而是一个:

    select d.ParselId,d.DestekId,d.Urun,d.KullanimSekli,d.TarimSekli,d.EkiliAlan,d.DesteklenenAlan,d.Aciklama,d.TarifeId,d.VeriSurumu from tblCiftci c inner join  tblParsel p  on c.CiftciId = p.CiftciId inner join tblDestek d on p.ParselId = d.ParselId where c.UretimSezonu = 2016 order by d.DestekId OFFSET 0 ROWS -- skip 10 rows FETCH NEXT 10 ROWS ONLY; --
    

    您应该删除该评论或将其设为不会影响以下代码的 Slash-Star 评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2017-08-30
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多