Mam kwerendy wydajność najbliższe sklepy:SQL Server: Geografia wydajność wyszukiwania - zapytania Najbliższe sklepy
Mamy tabelę, która zawiera około 50.000 rekordów (sklepy/punkt miejscach sprzedaży) w jednym kraju.
Każdy rekord zawiera location
kolumny typu „geografii”
[LOCATION_geo] [geography]
również dla wydajności utworzonego przestrzennego wskaźnika w tej kolumnie lokalizacji przy użyciu tej składni
CREATE SPATIAL INDEX [LOCATION_geoIndex]
ON [dbo].[StoreLocations] ([LOCATION_geo])
USING GEOGRAPHY_GRID
WITH (
GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM),
CELLS_PER_OBJECT = 16, PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Mam procedurę przechowywaną, aby powrócić najbliższy 1000 sklepów dla aktualnej lokalizacji użytkownika.
USE [CompanyDB]
GO
SET STATISTICS TIME ON;
GO
declare @point geography;
set @point = geography::Point(49.2471855, -123.1078987, 4326);
SELECT top (1000) [id]
,[Location_Name]
,[LOCATION_geo]from [MYDB].[dbo].[StoreLocations]
where [LOCATION_geo].STDistance(@point) <= 10000
ORDER BY [LOCATION_geo].STDistance(@point)
Problem polega na tym, że zapytanie zawsze trwa od 656 ms do 800 ms. I nie jest to akceptowalna wydajność dla naszej strony internetowej, ponieważ oczekujemy zbyt wielu połączeń synchronicznych.
(1000 row (s) affected)
SQL Server Execution Times: CPU time = 923 ms, czas, jaki upłynął = 1511 ms.
Uwaga: większość sklepów znajduje się w niektórych miastach (około 10 miast).
Zauważyłem także, że indeks klastrowy Uzyskaj koszt> = 45% całkowitego kosztu zapytania.
Moje pytanie brzmi: czy istnieje lepszy sposób na poprawę wydajności tego zapytania?
Czy zastosowano indeks przestrzenny? Czy możesz potwierdzić, że jest używany przez plan wykonania? – gotqn
Tak, jest używany, kosztuje 8%, a szacowany rozmiar rzędu 17 B, uporządkowany: prawda, szacowana liczba wykroczeń 109,8. –
Również ten indeks w planie wykluczania zawsze zawiera ostrzeżenie "Kolumny bez statystyk: .... SRID, ....pk0 ", Właściwie to nie wiem co to znaczy –