Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wydajność SQL count(*)

Mikael Eriksson ma dobre wyjaśnienie poniżej, dlaczego pierwsze zapytanie jest szybkie:

Serwer SQL zoptymalizuj go do:if exists(select * from BookChapters) . Więc szuka jednego wiersza zamiast liczyć wszystkie wiersze w tabeli.

W przypadku pozostałych dwóch zapytań SQL Server użyje następującej reguły. Aby wykonać zapytanie, takie jak SELECT COUNT(*) , SQL Server użyje najwęższegonieklastrowego indeks do zliczania wierszy. Jeśli tabela nie ma żadnego indeksu nieklastrowego, będzie musiała przeskanować tabelę.

Ponadto, jeśli Twój stół ma zgrupowany indeks, możesz uzyskać jeszcze szybsze liczenie, korzystając z następującego zapytania (zapożyczonego z tej strony Uzyskaj szybkie zliczanie wierszy!)

--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

Wykorzystuje tabelę systemową sysindexes. Więcej informacji znajdziesz tutaj SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2012

Oto kolejny link Dlaczego mój SELECT COUNT(*) działa tak wolno? z innym rozwiązaniem. Pokazuje technikę używaną przez Microsoft do szybkiego wyświetlania liczby wierszy po kliknięciu prawym przyciskiem myszy tabeli i wybraniu właściwości.

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

Powinieneś zauważyć, że to wraca bardzo szybko, bez względu na to, ile masz stołów.

Jeśli używasz SQL 2000, nadal możesz użyć tabeli sysindexes, aby uzyskać numer.

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

Ta liczba może być nieco niewłaściwa w zależności od tego, jak często SQL aktualizuje tabelę sysindexes, ale zwykle jest ona poprawna (lub przynajmniej wystarczająco bliska).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchamianie programu SQL Server 2014 na maszynie wirtualnej platformy Azure

  2. Co oznacza ON [PRIMARY]?

  3. Policz na podstawie warunku w SQL Server

  4. 3 metody odbudowy wszystkich indeksów dla wszystkich tabel za pomocą T-SQL w bazie danych SQL Server

  5. Jak wyłączyć wszystkie wyzwalacze w bazie danych SQL Server