Angenommen, ich habe eine Liste der Zeichenfolge, die vom Client gesendet wird, in diesem Fall Regionen. Und ich habe eine Tabelle namens Compliance-Regionen. Ich möchte nach den Zeilen suchen, für die eine name-Eigenschaft und ein region-Objekt in der Zeile vorhanden sein müssen.SQL INNER JOIN vs Wo gibt es Leistungsbewertung
In der LINQ kann ich es auf zwei verschiedene Arten tun. Wie unten, und sie produzieren zwei verschiedene SQL-Abfragen. Meine Frage ist, welche sollte ich wählen? Welche Abfrage hat die bessere Leistung?
List<string> regions = new List<string>() { "Canada", "EN 50530" };
var cregions = from c in complianceRegions
from r in regions
where c.Name.Equals(r)
select c;
var cregions2 = from c in complianceRegions
where regions.Any(x => x == c.Name)
select c;
Die erzeugte sql ist unten gezeigt.
-- cregions
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Description] AS [Description]
FROM [Administration].[ComplianceRegions] AS [Extent1]
INNER JOIN (SELECT
N'Canada' AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable1]
UNION ALL
SELECT
N'EN 50530' AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable2]) AS [UnionAll1] ON [Extent1].[Name] = [UnionAll1].[C1]
Und
--cregions2
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Description] AS [Description]
FROM [Administration].[ComplianceRegions] AS [Extent1]
WHERE EXISTS (SELECT
1 AS [C1]
FROM (SELECT
N'Canada' AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable1]
UNION ALL
SELECT
N'EN 50530' AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable2]) AS [UnionAll1]
WHERE [UnionAll1].[C1] = [Extent1].[Name]
)
Added Ausführungsplan wie gewünscht.
* Welche Abfrage hat die bessere Leistung? * Was haben Ihre eigenen Tests ergeben? –
der interessante Teil ist, wenn ich die gleiche Abfrage mehrmals ausführen, zwischenspeichert SQL Server die Abfrage und geben Sie mir falsche Leistung. –
Warum verwendet die erste Abfrage 'Enthält' und die zweite' == '? Welcher ist der vorgesehene Vergleichsoperator? Momentan vergleichen Sie Äpfel mit Orangen. –