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

Читанията не намаляват след поставяне на индекс

Избирате първите 50 реда, подредени по e.uon desc . Индекс, който започва с uon ще ускори заявката:

create index IX_Empl_Uon on dbo.empl (uon)

Индексът ще позволи на SQL Server да сканира горните N реда на този индекс. N е най-голямото число във вашата пагинация:за 3-та страница от 50 елемента, N е равно на 150. След това SQL Server прави 50 ключови търсения, за да извлече пълните редове от клъстерирания индекс. Доколкото знам, това е учебникарски пример за това къде един индекс може да направи голяма разлика.

Не всички оптимизатори на заявки ще бъдат достатъчно умни, за да забележат, че row_number() over ... as rn с where rn between 1 and 50 означава първите 50 реда. Но SQL Server 2012 го прави. Той използва индекса както за първата, така и за последователните страници, като row_number() between 50 and 99 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблем с вмъкване на паралелността - многонишкова среда

  2. Как да върнете броя на редовете в резултат от заявка в SQL Server

  3. Как да идентифицирате извикващия съхранена процедура от Sproc

  4. Върнете ред на всеки n-ти запис

  5. Брой(*) срещу Брой(1) - SQL Server