TimeOut - Abfrage verbessern



  • Hallo zusammen,
    ich habe ein recht komplexe Abfrage über mehrere Tabellen. Die Tabellen selbst haben teilweise bis zu 20.000 Datensätze.

    Nun wird meine Abfrage mit folgender Fehlermeldung abgebrochen:
    Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

    Wie kann ich die Abfrage schneller machen/ändern/verbessern?
    Als SQL schreiben? Wobei nur die Abfrage nach den NOT EXISTS Einträgen etwa 133 Sekunden benötigt ... 😞

    var query = from b in ctx.order
                                    join be in ctx.orderdetail on b.orderID
                                    equals be.orderID
                                    join le in ctx.deliverydetail on be.orderdetailID
                                    equals le.orderdetailID
                                    join l in ctx.delivery on le.deliveryID 
                                    equals l.deliveryID
                                    join r in ctx.account on le.accountNo
                                    equals r.accountNo
                                    orderby be.deliveryDate
                                    where !ctx.deliverydetail.Any(i => (i.orderdetailID == be.orderdetailID)) 
    
                                    select new Shipment
                                    {
                                        OrderNumber = b.orderNo,
                                        OrderDate = (DateTime)b.orderDate
    									// ...
                                    };
    
                        return query.ToList();
    


    1. Ja, in SQL schreiben.
    2. Execution Plan angucken (SQL Management Studio) und die diversen Probleme fixen (z.B. fehlende Indexe anlegen).


  • Vielleicht eine View anlegen, die die ganzen Joins schon Serverseitig bereithält...


Anmelden zum Antworten