Ich habe ein großes Leistungsproblem in Linq zu SQL entdeckt.Linq zu SQL nvarchar Problem
Bei der Auswahl aus einer Tabelle mit Strings sind die an sql-Server übergebenen Parameter immer nvarchar, auch wenn die Tabelle sql ein varchar ist. Dies führt zu Tabellen-Scans anstelle von Suchvorgängen, was ein enormes Leistungsproblem darstellt.
var q = (
from a in tbl
where a.index == "TEST"
select a)
var qa = q.ToArray();
Der Parameter wird als nvarchar durchlaufen, die in den gesamten Index führt, dass von VARCHAR umgewandelt, bevor sie nvarchar verwendet wird.
Wenn der Parameter ein Varchar ist, ist es eine sehr schnelle Suche.
Gibt es eine Möglichkeit, dies zu überschreiben oder zu ändern?
Dank Grüße Craig.
Wie sieht Ihre DBML aus? – RobS
Es ist eine Varchar-Spalte, keine Nvarchar-Spalte. create table test (Test varchar (200) nicht null) Index erstellen ixtest on test (Test) – Craig
Der Datenbankabfrageplan verwendet CONVERT_IMPLICIT und einen Scan anstelle einer Suche. Ich denke, es ist ein häufiges LINQ to SQL-Problem. Ich bin auf der Suche nach einer Problemumgehung, mit der Parameter korrekt angegeben werden können. varchar (200) anstelle von nvarchar (4), was zur Konvertierung führt. – Craig