2010-08-09 2 views
5

Ich habe die integrierte gespeicherte Prozedur sp_MSforeachtable verwendet, um die Zeilenanzahl jeder Tabelle in unserer Datenbank mithilfe von COUNT (*) zu ermitteln.Was ist die günstigste Abfrage, die ich ausführen kann, um zu sehen, ob es Zeilen in der Tabelle gibt?

Ich habe jedoch festgestellt, dass ich nur eine 0 oder 1 wollen, je nachdem, ob überhaupt Zeilen in der Tabelle vorhanden sind.

Kann ich noch etwas anderes verwenden, das schneller/billiger ist als COUNT (*)?

+0

bei http://stackoverflow.com/questions/1597442/subquery-using-exists-1-or-exists Werfen Sie einen Blick haben – StuartLC

+1

Welche Antworten Sie auch immer vorbringen, sollte ein Benchmark sein. COUNT (*) ist wahrscheinlich in Abhängigkeit vom DBMS gut optimiert, zusätzlich drückt es deutlich die Absicht dessen aus, was Sie zu tun versuchen. –

Antwort

8

diese Abfrage in Betracht. EXISTS stoppt die Ausführung, wenn die erste Übereinstimmung gefunden wird.

IF EXISTS (SELECT 1 FROM MyTable) 
BEGIN 
    print 'at least one!' 
END 
ELSE 
BEGIN 
    print 'no rows found in table' 
END 
+0

@Downvoter: erklären, warum das das Problem nicht löst und/oder dem OP hilft? –

0

Vielleicht einfach die erste Reihe greifen und eine 1 anzeigen?

select top 1 1 from tablename

+4

Nicht sicher, warum dies für TSQL upvoted wurde? –

+0

@ p.campbell: Sie könnten einfach nach der Korrektur fragen, anstatt Ihren eigenen Repräsentanten für das Downvoting zu verwenden. :) Korrektur richtig aussehen? –

+0

@ p.campbell; Ich habe dir sowieso eine positive Bewertung gegeben, hoffentlich entschädigt das dafür. –

0
SELECT TOP 1 ID FROM TABLE 

Dann können Sie einen EOF-Check tun, wenn der Re-Cord zurückgegeben.

0

sp_spaceused wird wahrscheinlich effizienter sein als COUNT(*).

Denken Sie daran, dass es nicht in Echtzeit aktualisiert wird, so dass es in allen Fällen möglicherweise nicht 100% genau ist.

3

Dadurch werden alle Tabellennamen drucken, die mindestens 1 Zeile

exec sp_MSforeachtable 'if exists (select 1 from ?) print ''?''' 
Verwandte Themen