Frage

LINQ vereinfacht die Datenbank-Programmierung keinen Zweifel, aber ist es eine Kehrseite haben? Inline SQL erfordert eine mit der Datenbank in einer bestimmten Art und Weise zu kommunizieren, um die Datenbank zu Injektionen öffnet. Inline-SQL muss auch seine Syntax-Option aktiviert ist, hat einen Plan gebaut, und dann ausgeführt, was wertvolle Zyklen dauert. Stored Procedures haben auch eine rock-solid-Standard in der großen Datenbank für Anwendungsprogrammierung gewesen. Viele Programmierer Ich kenne eine Datenschicht verwenden, die Entwicklung vereinfacht, jedoch nicht in dem Ausmaß LINQ tut. Ist es Zeit, auf der SP aufgeben und LINQ gehen?

War es hilfreich?

Lösung

LINQ to SQL stellt tatsächlich einige alarmierenden Performance-Probleme in der Datenbank. Grundsätzlich schafft es mehrere Ausführungspläne auf der Grundlage der Länge des Parameters Sie verwenden. Ich stellte darüber vor einiger Zeit auf meinem Blog LINQ to SQL kann zu Leistungsproblemen führen .

Nun, das ist zu sagen, dass LINQ keinen Platz hat? Kaum. LINQ hat auf jeden Fall einen Platz in dem Entwicklungs-Toolkit, wie gespeicherte Prozeduren. Letztlich wollen Sie gespeicherte Prozeduren verwenden, wenn die Leistung absolut notwendig ist, und ein ORM-Tool in jeder anderen Situation verwendet werden.

Was Inline-SQL geht, gibt es Möglichkeiten, Inline-SQL auszuführen, so dass der Plan nur einmal gebaut und wird nie neu kompiliert. Die meisten ORMs sollte auch dieser Aspekt der Leistungsoptimierung kümmern und mit diesen Methoden ist in der Regel der sicherste Weg, um Ihre SQL auszuführen, da es zwingt Sie parametrisierte Abfragen zu verwenden.

Wie die meisten Datenbanklösungen hängt die richtige Antwort auf das Problem zu lösen Sie versuchen. Wenn Sie die Entwicklungsgeschwindigkeit über Datenbank- / Anwendungsleistung bevorzugen, dann mit LINQ oder einem anderen DAL / ORM-Tool ist der beste Weg zu gehen. Wenn Sie die Leistung über einfache Entwicklung begünstigen, dann gespeicherte Prozeduren und reine Datensätze verwendet wird Ihre beste Wette. LLBLGen bietet sogar eine LINQ to LLBLGen Schicht, so dass Sie LINQ verwenden können LLBLGen die Objekte und haben LLBLGen tatsächlich behandeln den Aufbau Ihrer Anfragen und vermeiden einige der Stürze von LINQ abzufragen.

Andere Tipps

Ihre grundlegende Prämisse ist fehlerhaft ..

  
    

Inline SQL erfordert eine mit der Datenbank in einer bestimmten Art und Weise zu kommunizieren, um die Datenbank zu Injektionen öffnet.

  

Nein, es nicht. Hartcodierung Benutzer eingegebenen Werte in eine SQL-Anweisung tut, aber man kann so gut, dass mit gespeicherten Prozeduren tun.

Parametrierschritte Ihre Anfragen schützt vor Injection-Angriffe, aber Inline-SQL kann als gespeicherte Prozeduren ebenso leicht werden Parametrisierung.

  
    

Inline-SQL muss auch Syntax-geprüft wird, hat einen Plan gebaut, und dann ausgeführt.

  

Alle SQL (SPs und inline) müssen Syntax-geprüft und haben einen Plan auf den ersten Anruf aufgebaut. Danach werden der genaue Text der Anfrage und der Ausführungsplan zwischengespeichert. Wenn ein weitere Anforderung mit dem exakt gleichen Text (ohne Parameter) empfangen wird, wird der zwischengespeicherte Ausführungsplan verwendet.

Also, wenn Sie hart Codewerte in Inline-SQL, wird der Text nicht überein, und es wird die Abfrage erneut analysieren müssen. Wenn Sie die Parameter jedoch verwenden, wird der Text der Abfrage übereinstimmen, und Sie werden einen Cache-Treffer erhalten. In diesem Fall wäre es nicht, wenn die Abfrage in Inline-SQL oder einem SP Rolle.

Mit anderen Worten, das einzige Problem, mit Inline-SQL ist, dass es einfach etwas, das langsam und unsicher zu tun. Aber machen Inline-SQL schneller und sicherer ist keine Arbeit mehr, dass ein SP verwendet wird.

Was uns zu LINQ bringt, die immer Parameter verwenden, auch wenn Sie die Werte in die LINQ-Anweisung fest einprogrammieren, so dass „schnell & sicher“ Inline-SQL trivial.

LINQ hat auch den Vorteil, über SPs in einem Punkt alle Codes, anstatt über zwei verschiedene Maschinen verteilt.

Wenn Sie in Benchmarking interessiert sind, hat Rico Mariani ein ausgezeichnete 5-teiligen Studie , die qualitative und quantitative Unterschiede abdeckt.

Er kann ein MS Kerl sein, aber er ist als Performance-Mutter bekannt -. Seine Benchmarks sind gründlich und gut durchdacht

Dies ist eine Leistung betrieben von Maximilian Beller. Nach ihm LINQ ist viel viel langsamer. Lesen Sie seine umfassende Studie

Man denke nur an einen Spalt Namen zu ändern -. Nun die (n) SPs ändern und (x) Ansichten

Sie alles, was auf der Datenbank teuer ist (wie Suchen, Sortieren etc ..) und Sie werden nicht ein Problem bemerken.

Auch wenn Sie ein großes Raster ohne Paging angezeigt werden sollen ... dann einen Datensatz verwenden -., Dass man schneller

Stackoverflow verwendet auch linq2sql - sehen Sie ein Problem :)

Verwenden Sie ein ORM -. Es ist die Art und Weise auf die meisten Anwendungen zu gehen

PS: auch, über Mikro-Benchmarks - wie .. sie 10.000 Zeilen mit einem ORM wählen - es nicht tun. Das ist nicht, warum Sie ein ORM verwenden. Wenn Sie 10.000 Zeilen ADO verwenden auswählen möchten.

Es hängt davon ab, was Sie tun. LINQ wird weniger auf die tatsächlichen Daten / set Manipulation als eine echte Datenbank effizient sein. Aber Sie werden eine Menge sparen nicht über ein Netzwerk mit der Datenbank verbinden zu müssen.

Wenn Ihre Datenbank auf demselben Rechner oder formal ‚gut‘ verbunden ist, sind Sie wahrscheinlich besser dran, es zu benutzen.

Aber wenn Sie bekommen eine große Ergebnismenge von einem entfernten db zurück, die erhebliche Übertragungszeit bedeuten könnte, oder wenn es eine wirklich kurze Abfrage ist, die den Aufwand nicht rechtfertigen würde LINQ wahrscheinlich besser sein.

Aufgrund der Struktur von LINQ to SQL, gibt es keine Möglichkeit besteht darin, kann es sein, schneller als die Verwendung von rohen SQL, entweder eigene wohlgeformten Anfragen oder als gespeicherte Prozedur. Was für LINQ kauft man nicht beschleunigen, sondern gibt Sicherheit und Organisation; kurz gesagt die meisten Vorteile, dass ORMs gewähren Sie in der Regel.

LINQ to SQL ist nicht um Geschwindigkeit, es geht um ein wartbare Software-System zu bauen. Es geht um all die Dinge gewidmet Software Ingenieure und Architekten kümmern sich um, Sachen wie lose Kopplung und Schichtung

Das ist nicht zu sagen, dass Sie nicht ein paar wirklich wartbaren Code mit LINQ bauen kann - niemand Sie hält von sich selbst in den Fuß zu schießen, aber sie - aber richtig gemacht, kann LINQ enorm helfen. Ich sage nicht, LINQ ist eine silberne Kugel, jedoch. Es hat eine Vielzahl von Themen, die es schwierig machen, in vielen Unternehmen Situationen zu verwenden - weshalb MS Entity Framework (ADO.NET 3.0) bietet. Natürlich perfekt das ist noch nicht das letzte EF Misstrauen gegeben.

Ist LINQ to SQL oder sogar EF besser als roher SQL? Ich würde sagen, einen durchschlagenden Hells Ja. Gibt es andere Lösungen, die besser funktionieren könnte? Vielleicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top