sql >> Database teknologi >  >> RDS >> Sqlserver

Læsningen bliver ikke lav efter at have sat et indeks

Du vælger de øverste 50 rækker sorteret efter e.uon desc . Et indeks, der starter med uon vil fremskynde forespørgslen:

create index IX_Empl_Uon on dbo.empl (uon)

Indekset vil tillade SQL Server at scanne de øverste N rækker af dette indeks. N er det højeste tal i din paginering:for den 3. side med 50 elementer er N lig med 150. SQL Server foretager derefter 50 nøgleopslag for at hente de fulde rækker fra det klyngede indeks. Så vidt jeg ved, er dette et lærebogseksempel på, hvor et indeks kan gøre en stor forskel.

Ikke alle forespørgselsoptimeringsværktøjer vil være smarte nok til at bemærke, at row_number() over ... as rn med where rn between 1 and 50 betyder de øverste 50 rækker. Men det gør SQL Server 2012. Det bruger indekset både til første og på hinanden følgende sider, såsom row_number() between 50 and 99 .



  1. Hvordan returnerer dynamisk antal kolonner i funktion?

  2. Deadlock i MySQL på grund af Insert af flere tråde

  3. Symfony2 returnerer tom JSON på AJAX-kald, mens variabel ikke er tom

  4. Forbedre SQL INSERT-forespørgsel for at undgå sql-injektioner