Ich habe ein Verfahren wie dieses (vereinfacht):
CREATE PROCEDURE test @userName VARCHAR(64)
SELECT *
FROM member M
INNER JOIN order O
ON M.MemberId=O.MemberId
WHERE M.Username = @userName
In der Spalte Benutzername der Mitgliedstabelle befindet sich ein nicht gruppierter Index.
Der Plan-Cache zeigt eine implizite Konvertierung als solche:
Suchschlüssel [1]: Präfix: [MyDatabase]. [Dbo]. [Member] .Username = Skalaroperator (CONVERT_IMPLICIT (varchar (64), [@ Username], 0))
Ich habe mich nur gefragt, was diese implizite Konvertierung verursachen könnte, da sowohl der Parameter als auch der Felddatentyp "UserName" varchar (64) ist.
SP wird aus dem folgenden Framework aufgerufen:
EXEC test @Username=N'webSite.com'
Vielen Dank.
sql-server
sql-server-2008-r2
query-performance
stored-procedures
execution-plan
Stackoverflowuser
quelle
quelle
order
ist auch ein Schlüsselwort und somit eine schreckliche Wahl für einen Tabellennamen (und viele würden argumentieren, dass eine Tabelle mit Bestellungen oder Mitgliedern keine einzelnen Namen haben sollte - dies lässt den Eindruck entstehen, dass sie immer nur genau eine Zeile enthalten werden).Antworten:
Es war alles auf die Zusammenstellung der Säule zurückzuführen. Es unterschied sich von der Sortierung der Datenbank (und der Tabelle). Jetzt wurde die Sortierung der Spalte in die der Datenbank geändert, und es wird keine implizite Konvertierung mehr angezeigt. Habe keine Ahnung von den Interna und warum es das Problem verursacht hat.
quelle
CONVERT_IMPLICIT tritt auf, weil Sie eine Kollatierung in der Spalte haben, die nicht mit der Kollatierung des Parameters übereinstimmt. Der Parameter wird also in die Sortierung der Spalte konvertiert.
Zur weiteren Erläuterung: Es gibt Kollatierungszwangsregeln, die diese Konvertierung auslösen. Wenn Sie also eine implizite Sortierung für die Spalte und eine Zwangsvorgabe für den Parameter haben, wird der Parameter in die Sortierung der Spalte konvertiert. Wenn beide explizite, aber unterschiedliche Kollatierungen hätten, würde sich ein Kollatierungskonfliktfehler ergeben.
quelle