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

Liczba serwerów SQL jest powolna

Bardzo zbliżone przybliżone (ignorując wszelkie transakcje w locie) to:

SELECT SUM(p.rows) FROM sys.partitions AS p
  INNER JOIN sys.tables AS t
  ON p.[object_id] = t.[object_id]
  INNER JOIN sys.schemas AS s
  ON s.[schema_id] = t.[schema_id]
  WHERE t.name = N'myTable'
  AND s.name = N'dbo'
  AND p.index_id IN (0,1);

To zwróci dużo, dużo szybciej niż COUNT(*) , a jeśli twoja tabela zmienia się wystarczająco szybko, to nie jest wcale mniej dokładna - jeśli twoja tabela zmieniła się między rozpoczęciem COUNT (i zostały podjęte blokady) a jej zwróceniem (kiedy blokady zostały zwolnione i wszystkie oczekujące transakcje zapisu pozwolono teraz pisać do stołu), czy jest to o wiele bardziej wartościowe? Nie sądzę.

Jeśli masz jakiś podzbiór tabeli, którą chcesz policzyć (powiedz, WHERE some_column IS NULL ), możesz utworzyć filtrowany indeks w tej kolumnie i ustrukturyzować klauzulę WHERE w taki czy inny sposób, w zależności od tego, czy był to wyjątek, czy reguła (a zatem utwórz filtrowany indeks w mniejszym zestawie). Więc jeden z tych dwóch indeksów:

CREATE INDEX IAmTheException ON dbo.table(some_column)
  WHERE some_column IS NULL;

CREATE INDEX IAmTheRule ON dbo.table(some_column)
  WHERE some_column IS NOT NULL;

Następnie możesz uzyskać liczbę w podobny sposób, używając:

SELECT SUM(p.rows) FROM sys.partitions AS p
  INNER JOIN sys.tables AS t
  ON p.[object_id] = t.[object_id]
  INNER JOIN sys.schemas AS s
  ON s.[schema_id] = t.[schema_id]
  INNER JOIN sys.indexes AS i
  ON p.index_id = i.index_id
  WHERE t.name = N'myTable'
  AND s.name = N'dbo'
  AND i.name = N'IAmTheException' -- or N'IAmTheRule'
  AND p.index_id IN (0,1);

A jeśli chcesz wiedzieć coś przeciwnego, po prostu odejmij od pierwszego zapytania powyżej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Konkatenacja GROUP BY

  2. Zmuś Oracle do zwrócenia TOP N wierszy z SKIP LOCKED

  3. Wyszukiwanie rozmyte w programie SQL Server z wartością procentową dopasowania

  4. Uzyskaj liczbę przedmiotów i ich wartości w jednej kolumnie

  5. Hiperłącz wartość w wyniku zapytania SQL Server w SSMS