sql >> Database >  >> RDS >> Sqlserver

Lezingen worden niet laag na het plaatsen van een index

U selecteert de top 50 rijen gerangschikt op e.uon desc . Een index die begint met uon zal de zoekopdracht versnellen:

create index IX_Empl_Uon on dbo.empl (uon)

Met de index kan SQL Server de bovenste N rijen van deze index scannen. N is het hoogste getal in uw paginering:voor de 3e pagina van 50 elementen is N gelijk aan 150. SQL Server voert vervolgens 50 sleutelzoekopdrachten uit om de volledige rijen uit de geclusterde index op te halen. Voor zover ik weet, is dit een schoolvoorbeeld van waar een index een groot verschil kan maken.

Niet alle query-optimizers zijn slim genoeg om op te merken dat row_number() over ... as rn met where rn between 1 and 50 betekent de bovenste 50 rijen. Maar SQL Server 2012 wel. Het gebruikt de index zowel voor eerste als opeenvolgende pagina's, zoals row_number() between 50 and 99 .



  1. MySQl-database herstellen van .frm, ibdata en ib_logfile

  2. Som datediff in minuten met MySQL

  3. Hoe een langzame impliciete query op de pg_attribute-tabel in Rails te repareren

  4. Combineren van INSERT-instructies in een gegevensmodificerende CTE met een CASE-expressie