sql >> Database >  >> RDS >> Sqlserver

Aantal SQL(*) prestaties

Mikael Eriksson heeft hieronder een goede uitleg waarom de eerste vraag snel is:

SQL-server optimaliseert het in:if exists(select * from BookChapters) . Het gaat dus op zoek naar de aanwezigheid van één rij in plaats van alle rijen in de tabel te tellen.

Voor de andere twee query's zou SQL Server de volgende regel gebruiken. Om een ​​zoekopdracht uit te voeren zoals SELECT COUNT(*) , gebruikt SQL Server de smalsteniet-geclusterde index om de rijen te tellen. Als de tabel geen niet-geclusterde index heeft, moet deze de tabel scannen.

Ook als uw tafel een geclusterde . heeft index kunt u uw telling nog sneller krijgen met de volgende zoekopdracht (geleend van deze site Get Row Counts Fast!)

--SQL Server 2005/2008
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count]
FROM sys.sysindexes i WITH (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rowcnt desc

--SQL Server 2000
SELECT OBJECT_NAME(i.id) [Table_Name], i.rows [Row_Count]
FROM sysindexes i (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rows desc

Het gebruikt de systeemtabel van sysindexes. Meer info vind je hier SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2012

Hier is nog een link. Waarom werkt mijn SELECT COUNT(*) zo traag? met een andere oplossing. Het toont de techniek die Microsoft gebruikt om snel het aantal rijen weer te geven wanneer u met de rechtermuisknop op de tabel klikt en eigenschappen selecteert.

select sum (spart.rows)
from sys.partitions spart
where spart.object_id = object_id(’YourTable’)
and spart.index_id < 2

Je zou moeten ontdekken dat dit heel snel terugkeert, ongeacht hoeveel tafels je hebt.

Als je nog steeds SQL 2000 gebruikt, kun je de sysindexes-tabel gebruiken om het nummer te krijgen.

select max(ROWS)
from sysindexes
where id = object_id(’YourTable’)

Dit aantal kan enigszins afwijken, afhankelijk van hoe vaak SQL de sysindexes-tabel bijwerkt, maar het is meestal correct (of op zijn minst dichtbij genoeg).



  1. Beheerprogramma's voor SQL Server 2017

  2. JSON_UNQUOTE() – Verwijder aanhalingstekens uit een JSON-document in MySQL

  3. Wat hebben de Olympische Spelen, UEFA Euro 2016 voetbalwedstrijden en databases met elkaar gemeen?

  4. Probleem voor invoegen met psycopg