Heim >Datenbank >MySQL-Tutorial >Wie kann ich unterschiedliche Kombinationen über mehrere Spalten hinweg in SQL effizient zählen?

Wie kann ich unterschiedliche Kombinationen über mehrere Spalten hinweg in SQL effizient zählen?

DDD
DDDOriginal
2025-01-06 01:00:39641Durchsuche

How Can I Efficiently Count Distinct Combinations Across Multiple Columns in SQL?

Effizientes Zählen von DISTINCT-Werten in mehreren Spalten

In einem Szenario, in dem Sie die Anzahl eindeutiger Kombinationen über mehrere Spalten hinweg bestimmen müssen, wird ein gemeinsamer Der Ansatz besteht darin, eine Unterabfrage mit der DISTINCT-Klausel zu verwenden. Allerdings kann diese Technik manchmal ineffizient sein. Hier untersuchen wir eine mögliche Optimierungsmethode.

Die bereitgestellte Abfrage zielt darauf ab, unterschiedliche „DocumentId“- und „DocumentSessionId“-Kombinationen aus der „DocumentOutputItems“-Tabelle zu zählen:

SELECT COUNT(*) 
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
      FROM DocumentOutputItems) AS internalQuery

Um die Leistung zu verbessern, Erwägen Sie die Generierung einer persistenten berechneten Spalte basierend auf einem Hash oder einer verketteten Kombination der betreffenden Spalten. Sobald diese Spalte erstellt wurde, kann sie indiziert werden und mit Statistiken verknüpft werden, sofern geeignete Datenbankeinstellungen vorausgesetzt werden.

Durch die Nutzung dieser persistenten berechneten Spalte sollte eine DISTINCT-Zählungsoperation für das abgeleitete Feld ein äquivalentes Ergebnis wie die ursprüngliche Abfrage liefern . Dieser Ansatz macht eine Unterabfrage überflüssig und verbessert möglicherweise die Effizienz. Hier ist ein Beispiel:

ALTER TABLE DocumentOutputItems
ADD DocumentUniqueIndex AS HASHBYTES('MD5', DocumentId + DocumentSessionId) PERSISTED;

SELECT COUNT(DISTINCT DocumentUniqueIndex)
FROM DocumentOutputItems;

Das obige ist der detaillierte Inhalt vonWie kann ich unterschiedliche Kombinationen über mehrere Spalten hinweg in SQL effizient zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn