I codiert die folgende Abfrage:Wie kann ich zwei Queries horizontal kombinieren?
SELECT u.LastName Col1
, convert(varchar, COALESCE(COUNT(DISTINCT pm.PhraseId), 0)) AS Col2
, convert(varchar, COALESCE(COUNT(DISTINCT pc.PhraseId), 0)) AS Col3
FROM dbo.AspNetUsers u
LEFT JOIN dbo.Phrase pm ON u.Id = pm.ModifiedBy
LEFT JOIN dbo.Phrase pc ON u.Id = pc.CreatedBy
GROUP BY u.LastName
Leistung war sehr schlecht und es dauerte eine Minute zu überfahren.
ich dann versucht, es zu brechen in zwei Abfragen nach unten und jeder von ihnen nimmt nur zwei Sekunden laufen:
SELECT u.LastName Col1
, convert(varchar, COALESCE(COUNT(DISTINCT pm.PhraseId), 0)) AS Col2
FROM dbo.AspNetUsers u
LEFT JOIN dbo.Phrase pm ON u.Id = pm.ModifiedBy
GROUP BY u.LastName
SELECT u.LastName Col1
, convert(varchar, COALESCE(COUNT(DISTINCT pc.PhraseId), 0)) AS Col2
FROM dbo.AspNetUsers
LEFT JOIN dbo.Phrase pm ON u.Id = pc.CreatedBy
GROUP BY u.LastName
Als die erste Abfrage nicht ausführbar ist, würde Ich mag einen Weg finden, um die Ausgänge des kombinieren die zwei kleineren Abfragen. Hier ist das Ergebnis Ich mag würde mit der Tabelle DDL auszukommen:
Ich habe zwei Tabellen:
CREATE TABLE [dbo].[Phrase] (
[PhraseId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
[English] NVARCHAR (250) NOT NULL,
[CreatedBy] INT DEFAULT ((1)) NOT NULL,
[ModifiedBy] INT DEFAULT ((1)) NOT NULL,
PRIMARY KEY CLUSTERED ([PhraseId] ASC)
);
CREATE TABLE [dbo].[AspNetUsers] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (MAX) NULL,
[LastName] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC)
);
Col1 Col2 Col3
ad1 100 50
ad2 10 5
ad3 200 99
Bitte beachte, dass ich so indiziert:
create nonclustered index ix_Phrase_CreatedBy on dbo.Phrase (CreatedBy)
create nonclustered index ix_Phrase_ModifiedBy on dbo.Phrase (ModifiedBy)
Ich würde schätzen Vorschläge, wie ich die kleineren 2 Sekunden Laufzeit Abfragen kombinieren könnte, wie es scheint, was auch immer ich kann ich nicht die erste Abfrage, um schnell zu laufen. Nicht sicher, ob dies ein SQL Server Problem ist, oder was