Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Производителност на SQL брой(*).

Микаел Ериксон има добро обяснение по-долу защо първата заявка е бърза:

SQL сървърът го оптимизира в:if exists(select * from BookChapters) . Така че започва да търси наличието на един ред, вместо да брои всички редове в таблицата.

За другите две заявки SQL Server ще използва следното правило. За да изпълните заявка като SELECT COUNT(*) , SQL Server ще използва най-тесниянеклъстерен индекс за преброяване на редовете. Ако таблицата няма неклъстериран индекс, тя ще трябва да сканира таблицата.

Освен това, ако таблицата ви е склъстерна индекс, можете да получите своя брой още по-бързо, като използвате следната заявка (заимствана от този сайт Вземете бързо броя на редовете!)

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

Той използва системна таблица на sysindexes. Повече информация можете да намерите тук SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2012

Ето още една връзка Защо моят SELECT COUNT(*) работи толкова бавно? с друго решение. Показва техника, която Microsoft използва за бързо показване на броя на редовете, когато щракнете с десния бутон върху таблицата и изберете свойства.

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

Трябва да откриете, че това се връща много бързо, независимо колко таблици имате.

Ако все още използвате SQL 2000, можете да използвате таблицата sysindexes, за да получите номера.

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

Това число може да не е малко в зависимост от това колко често SQL актуализира таблицата на sysindexes, но обикновено е правилен (или поне достатъчно близо).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверите настройката ANSI_NULLS на вашата сесия в SQL Server

  2. Не може да се разреши конфликтът на съпоставяне между SQL_Latin1_General_CP1_CI_AS и Latin1_General_CI_AS в операция равна на

  3. Как да настроите съпоставянето на база данни в SQL Server (T-SQL)

  4. Свързване към MS SQL Server с удостоверяване на Windows с помощта на Python?

  5. TSQL PIVOT МНОГО КОЛОНИ