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

Zła wydajność zapytania SQL z powodu klauzuli ORDER BY

ZAMÓW PRZEZ musi posortować zestaw wyników, co może zająć dużo czasu, jeśli jest duży.

Aby go zoptymalizować, może być konieczne prawidłowe indeksowanie tabel.

Ścieżka dostępu do indeksu ma jednak swoje wady, więc może potrwać dłużej.

Jeśli w zapytaniu występuje coś innego niż equijoins lub predykaty z zakresu (np. < , > lub POMIĘDZY lub GRUPA WG klauzuli), a następnie indeks używany dla ORDER BY może uniemożliwić korzystanie z innych indeksów.

Jeśli opublikujesz zapytanie, prawdopodobnie będę w stanie powiedzieć Ci, jak je zoptymalizować.

Aktualizacja:

Przepisz zapytanie:

SELECT  *
FROM    View_Product_Joined j 
LEFT JOIN
        [dbo].[OPR_InventoryRules] irp
ON      irp.ID = j.skuid
        AND irp.InventoryRulesType = 'Product'
LEFT JOIN
        [dbo].[OPR_InventoryRules] irs
ON      irs.ID = j.NodeSiteID
        AND irs.InventoryRulesType = 'Store'
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    OPR_PriceLookup pl
        WHERE   pl.siteID = j.NodeSiteID
                AND pl.skuid = j.skuid
                AND pl.RoleID IN (-1, 13)
        ORDER BY
                pl.RoleID desc
        ) pl
WHERE   SiteName = N'EcommerceSite'
        AND Published = 1
        AND DocumentCulture = N'en-GB'
        AND NodeAliasPath LIKE N'/Products/Cats/Computers/Computer-servers/%'
        AND NodeSKUID IS NOT NULL
        AND SKUEnabled = 1
ORDER BY
        NodeOrder ASC

Relacja View_Product_Joined , jak sama nazwa wskazuje, to prawdopodobnie widok.

Czy możesz opublikować jego definicję?

Jeśli jest indeksowalny, możesz skorzystać z utworzenia indeksu na View_Product_Joined (SiteName, Published, DocumentCulture, SKUenabled, NodeOrder) .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę ograniczyć część witryny tak, aby była widoczna tylko na jednym komputerze na raz?

  2. Haszowanie ponad 8000 bajtów w SQL Server

  3. SELECT TOP działa wolno, niezależnie od ORDER BY

  4. NHibernate Linq Group By nie grupuje poprawnie w SQL Server

  5. SQL Server — zwracana wartość po INSERT