sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu urychlit tento dotaz SQL Server Spatial?

Zdá se, že máte optimální plán pro spuštění dotazu. Bude těžké se v tom zlepšit. Zde je několik postřehů.

Dotaz provádí Clustered Index Scan na indexu PK_States. Nepoužívá prostorový index. Důvodem je, že optimalizátor dotazů se domnívá, že bude lepší použít seskupený index namísto jakéhokoli jiného indexu. Proč? Pravděpodobně proto, že v tabulce států je málo řádků (50 plus možná několik dalších pro Washington, D.C., Portoriko atd.).

SQL Server ukládá a načítá data na 8KB stránkách. Velikost řádku (viz Odhad velikosti řádku) pro operaci filtru je 8052 bajtů, což znamená, že na stránku je jeden řádek a celá tabulka má přibližně 50 stránek. Plán dotazů odhaduje, že zpracuje asi 18 těchto řádků (viz Odhadovaný počet řádků). Toto není významný počet řádků ke zpracování. Moje vysvětlení se nezabývá stránkami navíc, které jsou součástí tabulky, ale jde o to, že číslo je kolem 50 a ne 50 000 stránek.

Takže zpět k tomu, proč používá index PK_States místo indexu SPATIAL_States_Boundry. Clusterový index podle definice obsahuje skutečná data pro tabulku. Neshlukovaný index ukazuje na stránku, kde existují data, takže existuje více stránek k načtení. Neklastrovaný index se tedy stává užitečným pouze tehdy, když existuje větší množství dat.

Mohou existovat věci, které můžete udělat, abyste snížili počet zpracování stránek (např. použijte krycí index), ale váš aktuální dotaz je již dobře optimalizován a nezaznamenáte žádné výrazné zlepšení výkonu.



  1. MySQL spojte dvě tabulky, najděte maximální počet a seřaďte podle

  2. Několik oblastí vylepšení v PostgreSQL 9.4

  3. PostgreSQL, nelze aktualizovat řádek (se zabezpečením na úrovni řádku)

  4. Nemůžete se připojit pomocí mysql_connect k databázi na hostingu ipage.com?