<\/HEAD>
Existuje přibližně tolik názorů a zdrojů o ladění SQL Spatial Indexu, kolik je i o tom, proč je použití Sequential GUID dobré nebo špatné. Je zde The Black Art Of Spatial Index Tuning In SQL Server | boomphisto<\/A> , ArcGIS Help 10.1, <\/A>Spatial Indexing Overview<\/A> ,<\/A> Spatial Indexing: From 4 Days to 4 Hours - CSS SQL Server Engineers - Site Home - MSDN Blogs<\/A>, sp_help_spatial_geography_histogram and Indexing geography data in SQL Server Denali | Alastair Aitchison<\/A> , Basic Multi-Level Grids - Isaac @ MSDN - Site Home - MSDN Blogs<\/A> , http:\/\social.technet.microsoft.com\wiki\contents\articles\9694.tuning-spatial-point-data-queries-in-sql-server-2012.asp
, a samozřejmě, pokud jste někdy bojovali s špatně fungujícím spatial indexem a napsali o tom na internetu, je pravděpodobné, že jste dostali odpověď od tohoto chlapa< / A > . < / SPAN > < / P > < P > < / P > < P > < SPAN style = "font-size: 12pt; font-family: calibri, verdana, arial, sans-serif; " > Bohužel většina z nás nejsou databázoví programátoři ani nesníme v SQL syntaxi. SQL je jako učit se francouzsky čtením čínského slovníku. Nevím jak vy, ale já nedokážu pochopit ani jediný řádek SQL kódu. Rád kopíruji SQL útržky od ostatních a upravuji je, dokud nefungují. Zejména miluji toto tvrzení z ArcGIS Help: " Pokud vytváříte svá data pomocí < / SPAN > ArcGIS for Desktop < / SPAN > , prostorový mřížkový index je pro vás vypočítán." To je jako říct "Pokud vložíte klíč do zapalování, vaše auto pojede do obchodu, koupí mléko a NEZABIJÍ na cestě mývala." Pokud nejste řidič z Massachusetts, je jasné, že musíte upravit pár věcí, například otáčet volantem a mačkat plyn v nekonečně unikátních kombinacích, abyste se dostali do obchodu s mlékem a vyhnuli se mývalovi. Totéž platí pro SQL Spatial Indexy v SDE databázi. Jen proto, že software je aktivuje automaticky neznamená, že je index optimalizován pro vaše konkrétní datové prostředí.< / SPAN >< / SPAN >< / P > < P > < / P > < P > < SPAN style = "color: #4d4d4d; font-size: 12pt; font-family: calibri, verdana, arial, sans-serif; " > Z krabice ArcGIS vytvoří prostorový index s 16 buňkami na objekt se všemi čtyřmi úrovněmi nastavenými na Medium Grid Levels.< / SPAN >< / P > < P > < / P > < P > < SPAN style = "color: #4d4d4d; font-size: 12pt; font-family: calibri, verdana, arial, sans-serif; " >
< / SPAN >< / P > < P style = "text-align: center; " >
< / P > < P style = "text-align: left; " > Všimněte si, že typ úložiště je Goemetry, což někteří z vás objevují jako „Nový“ výchozí formát úložiště ESRI.< / P > < P style = "text-align: left; " >< / P > < P style = "text-align: left; " > Podívejme se, jak „Out of the Box“ prostorový index funguje. Jedním ze způsobů rychlého a snadného testování prostorového indexu jsou Spatial Index Stored Procedures< / A > .< / P > < P style = "text-align: left; " >< / P > < PRE class = "lia-code-sample line-numbers language-none" > CREATE SPATIAL INDEX
--TO JE VÝCHOZÍ NÁZEV INDEXU
--VYTVOŘENÝ ARCGIS
[S1169_idx]
ON
--A TO JE NÁZEV TABULKY
--ZADANÝ UŽIVATELEM V ARCGIS
--PŘI VYTVOŘENÍ
[dbo].[TEST_GEOM]
(
[SHAPE]
)USING GEOMETRY_GRID
WITH (BOUNDING_BOX =(227166.13, 3925740.74, 314851.6915, 3968047.64),
GRIDS =(
LEVEL_1 = MEDIUM,
LEVEL_2 = MEDIUM,
LEVEL_3 = MEDIUM,
LEVEL_4 = MEDIUM),
CELLS_PER_OBJECT = 16, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
--DROP_EXISTING = ON UMOŽŇUJE NÁM TO DĚLAT CELÝ DEN
--BEZ POTŘEBY MAZAT IDX
DROP_EXISTING = ON,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]
GO
DECLARE @geom geometry
--POLYGON JE OBLAST MENŠÍ NEŽ BOUNDING BOX
SET @geom = GEOMETRY::STGeomFromText('POLYGON ((247804.201 3943957.896, 29932.568 3943963.210, 247671.344 3942876.441, 247684.630 3943652.325,247804.201 3943957.896))', 26917)jjj
exec sp_help_spatial_geometry_index 'TEST_GEOM', 'S1169_idx', 1, @geom< / PRE > < P > Výstup je opravdu OBROVSKÝ. První věc co mi padla do oka je:< / P > < TABLE >< TBODY >< TR >< TD style= "text-align:center;">Primary_Filter_Efficiency< / TD >< TD style= "text-align:center;">19.634703196347< / TD >< / TR >< / TBODY >< / TABLE > < P > a také:< / P > < TABLE >< TBODY >< TR >< TD>Internal_Filter_Efficiency< / TD >< TD>0< / TD >< / TR >< / TBODY >< / TABLE > < P > Nejsem odborník na SQL nebo prostorové indexy, ale tyto hodnoty nevypadají dobře. Není divu že mé vykreslování trvá dlouho, prostorové dotazy jsou pomalé a obecně databáze funguje hrozně špatně. Každá tabulka vytvořená ArcGIS má stejné parametry indexu!< / P > < P > Jen tak pro srandu změňme počet buněk na objekt změnou pouze tohoto v uvedeném kódu:< / P > < PRE class= "lia-code-sample line-numbers language-none">CELLS_PER_OBJECT = 4096< / PRE > < P >< / P > < P > A podívejte se na zvýšení efektivity!< / P > < TABLE >< TBODY >< TR >< TD>Internal_Filter_Efficiency< / TD >< TD>76.7441860465116< / TD >< / TR >< TR >< TD>Primary_Filter_Efficiency< / TD >< TD>< P >91.4893617021277< / P >< / TD >< / TR >< / TBODY >< / TABLE > < P >< / P > < P > Opět tvrdím že nejsem odborník na ladění SQL Spatial Indexů ale myslím že jsem na něco přišel. Ukázalo se že moje testovací data jsou „Velmi složité Line Strings“, což pokud nežijete pod GIS kamenem je to přesně to co jsou všechna vaše data. Náhodou použití hodnoty 8192 pro Cells Per Object v tomto scénáři je dobrým výchozím bodem podle tohoto odkazu:good starting point.< / A >
< /P>
Ale existuje mnoho (mnoho a mnoho) hodnot mezi 16 a 8092 a pak všechny permutace Low, Medium a High které by mohly být testovány k určení prostorového indexu který vám pravděpodobně poskytne nejlepší výkon většinu času.Co kdyby existoval způsob jak automaticky testovat nastavení prostorového indexu a magicky určit které parametry nejlépe vyhovují vašemu datovému scénáři?
Přichází SDE Hacker....
Narazil jsem na tento příspěvek na Stack Overflow o geospatial - Výběr dobrého SQL Server 2008 spatial indexu s velkými polygony kde někdo zveřejnil uloženou proceduru v SQL která projde velikosti buněk a úrovně mřížky aby nahlásila výsledky prostorových dotazů pro každou permutaci (zadá uživatel). Jako kutil jsem samozřejmě rozbil kód když jsem se snažil přidat spoustu výstupu. Nakonec jsem to rozchodil. Tady to je:
--ORIGINÁLNÍ SQL KÓD OD
http://stackoverflow.com/users/2250424/greengeo
--MODIFIKOVÁNO PRO ZAHRNUTÍ VÝSTUPU SPATIAL INDEX HELP
--V TABULCE
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--HLEDEJTE VÝKŘIČNÍKY V TENTO KÓD
--EXISTUJE NĚKOLIK PROMĚNNÝCH ZADANÝCH UŽIVATELEM, KTERÉ MUSÍ BÝT
--ZADÁNY, ABY TENTO SP FUNGOVAL
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
POUŽIJTE DATBASE
GO
VYTVOŘTE PROCEDURU dbo.sp_tune_spatial_index
(
@tabnm VARCHAR(MAX), -- Tento parametr uchovává název prostorové tabulky, pro kterou ladíte index
@idxnm VARCHAR(MAX), -- Tento parametr uchovává název prostorového indexu pojmenované tabulky
@min_cells_per_obj INT, -- Minimální počet buněk na objekt k testování. Doporučeno začít na 2.
@max_cells_per_obj INT, -- Maximální počet buněk na objekt k testování.
/* Test vyžaduje dvě instance geometrie k použití v testovacím dotazu 1 a 2.
První by měla pokrývat oblast výchozího rozsahu. Druhá by měla
pokrýt oblast přibližně velikosti oblasti zobrazené při přiblížení a posouvání.
Je požadováno, aby proměnná uchovávala řetězec, který vytvoří
instanci geometrie, protože to bude provedeno uvnitř procedury a
nemůže to být proměnná typu: GEOMETRY. SRID těchto instancí musí
odpovídat SRID tabulky, kterou testujete. */
@testgeom1 VARCHAR(MAX), -- Tento parametr uchovává první řetězec pro vytvoření instance geometrie, který bude použit v testu
@testgeom2 VARCHAR(MAX) -- Tento parametr uchovává druhý řetězec pro vytvoření instance geometrie, který bude použit v testu
)
JAKO
NASTAVTE NOCOUNT ON;
/* Před spuštěním této procedury jsou vyžadovány dvě tabulky. Tyto tabulky jsou
zde vytvořeny pro přípravu spuštění procedury. */
VYTISKNOUT 'Kontrola požadovaných tabulek...'
POKUD EXISTUJE(SELECT 1 FROM sysobjects WHERE name IN ('cell_opt_perm', 'spat_idx_test_result'))
ZAČNĚTE
VYTISKNOUT '... Tabulky "cell_opt_perm" a "spat_idx_test_result" existují.'
KONČEJTE
JINAK
ZAČNĚTE
VYTISKNOUT '... Vytvářím tabulky "cell_opt_perm" a "spat_idx_test_result".'
VYTVOŘTE TABULKU cell_opt_perm(
[perm_id] [smallint] NE NULL,
[permutation] [nvarchar](4) NE NULL,
[level1] [nvarchar](6) NE NULL,
[level2] [nvarchar](6) NE NULL,
[level3] [nvarchar](6) NE NULL,
[level4] [nvarchar](6) NE NULL
)
VLOŽTE DO cell_opt_perm ([perm_id], [permutation], [level1], [level2], [level3], [level4])
HODNOTY (1,'LLLL','LOW','LOW','LOW','LOW'),
(2,'LLLM','LOW','LOW','LOW','MEDIUM'),
(3,'LLLH','LOW','LOW','LOW','HIGH'),
(4,'LLML','LOW','LOW','MEDIUM','LOW'),
(5,'LLMM','LOW','LOW','MEDIUM','MEDIUM'),
(6,'LLMH','LOW','LOW','MEDIUM','HIGH'),
(7,'LLHL','LOW','LOW','HIGH','LOW'),
(8,'LLHM','LOW','LOW','HIGH','MEDIUM'),
(9,'LLHH','LOW','LOW','HIGH','HIGH'),
(10,'LMLL','LOW','MEDIUM','LOW','LOW'),
(11,'LMLM','LOW','MEDIUM','LOW','MEDIUM'),
(12,'LMLH','LOW','MEDIUM','LOW','HIGH'),
(13,'LMML','LOW','MEDIUM','MEDIUM','LOW'),
(14,'LMMM','LOW','MEDIUM','MEDIUM','MEDIUM'),
(15,'LMMH','LOW','MEDIUM','MEDIUM','HIGH'),
(16,'LMHL','LOW','MEDIUM','HIGH','LOW'),
(17,'LMHM','LOW','MEDIUM','HIGH','MEDIUM'),
(18,'LMHH','LOW','MEDIUM','HIGH','HIGH'),
(19,'LHLL','LOW','HIGH','LOW','LOW'),
(20,'LHLM','LOW','HIGH','LOW','MEDIUM'),
(21,'LHLH','LOW','HIGH','LOW','HIGH'),
(22,'LHML','LOW','HIGH','MEDIUM','LOW'),
(23,'LHMM','LOW','HIGH','MEDIUM','MEDIUM'),
(24,'LHMH','LOW','HIGH','MEDIUM','HIGH'),
(25,'LHHL','LOW','HIGH','HIGH','LOW'),
(26,'LHHM','LOW','HIGH','HIGH','MEDIUM'),
(27,'LHHH','LOW','HIGH','HIGH','HIGH'),
(28,'MLLL','MEDIUM','LOW','','') /* truncated for brevity */
VYTVOŘTE TABULKU spat_idx_test_result(
[perm_id] [int] NE NULL,
[num_cells] [int] NE NULL,
[permut] [nvarchar](4) NE NULL,
[g1t1] [bigint] NULL,
[g1t2] [bigint] NULL,
[g1t3] [bigint] NULL,
[g1t4] [bigint] NULL,
[g2t1] [bigint] NULL,
[g2t2] [bigint] NULL,
[g2t3] [bigint] NULL,
[g2t4] [bigint] NULL,
[PF_EFF][float] NULL,
[IF_EFF][float] NULL,
[GRIDL1] [int] NULL,
[GRIDL2] [int] NULL,
[GRIDL3] [int] NULL,
[GRIDL4] [int] NULL,
[TPIR] [bigint] NULL,
[TPIP] [bigint] NULL,
[ANOIRPBR] [bigint] NULL,
[TNOOCILFQ] [bigint] NULL,
[TNOOCIL3FQ] [bigint] NULL,
[TNOOCIL4FQ] [bigint] NULL,
[TNOOCIL0II] [bigint] NULL,
[TNOOCIL4II] [bigint] NULL,
[TNOIOIL3FQ] [bigint] NULL,
[TNOIOIL4FQ] [bigint] NULL,
[ITTCNTLGP] [float] NULL,
[INTTTCNTLGP] [float] NULL,
[BTTCNTLGP] [float] NULL,
[ACPONTLGP] [float] NULL,
[AOPG] [float] NULL,
[NORSBPF] [bigint] NULL,
[NORSBIF] [bigint] NULL,
[NOTSFIC] [bigint] NULL,
[NORO] [bigint] NULL,
[PORNBPF] [float] NULL,
[POPFRSBIF] [float]NULL
)
INSERT INTO dbo.spat_idx_test_result
VALUES (0,16,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)
kONEC
/* smažte všechny řádky z tabulky "spat_idx_test_result". Tím se připraví na vložení nových výsledků.
!!!VAROVÁNÍ!!! pokud byl váš test přerušen, tabulka bude vymazána a test začne od začátku.
vMůžete se pokusit upravit toto tak, aby začal tam, kde jste skončili, ale
já jsem neměl čas a toto mi fungovalo dostatečně dobře. */
sMAZAT Z spat_idx_test_result
WHERE perm_id != 0
/* nastavte čítače */
dECLARE @a1 INT
dECLARE @a2 INT
dECLARE @a3 INT
dECLARE @a4 INT
/* nastavte proměnnou pro uchování hodnot high/medium/low a permutace k použití při obnově
s prostorového indexu a zaznamenávání statistik */
dECLARE @lev1 VARCHAR(6)
dECLARE @lev2 VARCHAR(6)
dECLARE @lev3 VARCHAR(6)
dECLARE @lev4 VARCHAR(6)
dECLARE @permut VARCHAR(6)
dECLARE @num_cell VARCHAR(4)
dECLARE @time_str VARCHAR(20)
dECLARE @perm_id VARCHAR(20)
dECLARE @x xml
dECLARE @pf_eff FLOAT
/* vytvořte proměnnou pro uchování časových razítek začátku a konce testovacích dotazů */
dECLARE @start_t DATETIME
dECLARE @end_t DATETIME
dECLARE @elapse_t INT
/* začněte cyklus přes permutace možností buněk */
sET @a1 = @min_cells_per_obj
WHILE @a1 <= @max_cells_per_obj
BEGIN
SET @a2 = 1
PRINT 'Začal test pro ' +CAST(@a1 AS VARCHAR(10)) +' buněk na objekt'
wHILE @a2 < 82
BEGIN
SELECT @lev1 = level1, @lev2 = level2, @lev3 = level3, @lev4 = level4 FROM cell_opt_perm WHERE perm_id = @a2
SET @permut = '''' +(SELECT permutation FROM cell_opt_perm WHERE perm_id = @a2) +''''
sETUPRAVIT
s (
sCREATE SPATIAL INDEX ' +@idxnm +' ON ' +@tabnm +'
s (
s[SHAPE]
s )
sUSING GEOMETRY_GRID
sWITH
s(
s--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
s--UJISTĚTE SE, ŽE UPRAVÍTE OHRANIČUJÍCÍ BOX TAK, ABY BYL PŘESNĚ STEJNÝ JAKO OHRANIČUJÍCÍ
s--BOX VAŠÍ PROSTOROVÉ TABULKY
s--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
sBOUNDING_BOX =(227166.13, 3925740.74, 314851.6915, 3968047.64),
sGRIDS =(LEVEL_1 = ' +@lev1 +' ,LEVEL_2 = ' +@lev2 +' ,LEVEL_3 = ' +@lev3 +' ,LEVEL_4 = ' +@lev4 +' ),
CELLS_PER_OBJECT = ' +@a1 +' ,
PAD_INDEX = VYPNUTO,
SORT_IN_TEMPDB = VYPNUTO,
DROP_EXISTING = ZAPNUTO,
ALLOW_ROW_LOCKS = ZAPNUTO,
ALLOW_PAGE_LOCKS = ZAPNUTO,
FILLFACTOR = 100
)
NA [PRIMARY]
'
)
PRINT 'Znovu vytvořený index na ' +@permut
SET @a3 = 1
SET @a4 = 1
WHILE @a3 < 5
BEGIN
SET @start_t = GETDATE()
EXEC
(
'VYTVOŘIT TABULKU #tmp_tab (shp GEOMETRY)
DECLARE @g1 GEOMETRY
SET @g1 = ' +@testgeom1 +'
INSERT #tmp_tab (shp)
SELECT
r.Shape AS shp
FROM
' +@tabnm +' r
WHERE
r.SHAPE.STIntersects(@g1) = 1
DROP TABLE #tmp_tab'
)
SET @end_t = GETDATE()
SET @elapse_t = (SELECT DATEDIFF(MS, @start_t, @end_t))
SET @num_cell = CAST(@a1 AS VARCHAR(6))
SET @time_str = CAST(@elapse_t AS VARCHAR(20))
IF @a3 = 1
BEGIN
IF (SELECT TOP 1 perm_id FROM spat_idx_test_result) IS NULL
BEGIN
SET @perm_id = 1
END
ELSE
BEGIN
SET @perm_id = CAST((SELECT MAX(perm_id+1) FROM spat_idx_test_result) AS VARCHAR(20))
END
EXEC
(
'
INSERT INTO spat_idx_test_result (perm_id, num_cells, permut, g1t' +@a3 +')
VALUES (' +@perm_id +', ' +@num_cell +', ' +@permut +', ' +@time_str +')'
)
END
ELSE
EXEC
(
'
UPDATE spat_idx_test_result
SET
num_cells = ' +@num_cell +',
permut = ' +@permut +',
g1t' +@a3 +' = ' +@time_str +'
WHERE perm_id = ' +@perm_id
)
SET @a3 = @a3 + 1
END
WHILE @a4 < 5
BEGIN
SET @start_t = GETDATE()
EXEC
nbsp;
nbsp;
nbsp;
'tCREATE TABLE #tmp_tab (shp GEOMETRY)
declare @g2 geometry set @g2 =' +@testgeom2+'
insert #tmp_tab (shp)
select r.Shape as shp from '+@tabnm+' r where r.SHAPE.STIntersects(@g2) = 1 drop table #tmp_tab'
nbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp;
snbsp; 3)'
,g1t4 jako 'ms k dotazu celé geometrie (Úroveň 4)'
,g2t1 jako 'ms k provedení prostorového dotazu (Úroveň 1)'
,g2t2 jako 'ms k provedení prostorového dotazu (Úroveň 2)'
,g2t3 jako 'ms k provedení prostorového dotazu (Úroveň 3)'
,g2t4 jako 'ms k provedení prostorového dotazu (Úroveň 4)'
,PF_EFF jako 'Efektivita primárního filtru'
,IF_EFF jako 'Efektivita interního filtru'
,GRIDL1 jako 'Velikost mřížky Úroveň 1'
,GRIDL2 jako 'Velikost mřížky Úroveň 2'
,GRIDL3 jako 'Velikost mřížky Úroveň 3'
,GRIDL4 jako 'Velikost mřížky Úroveň 4'
,TPIR jako 'Celkový počet řádků primárního indexu'
,TPIP jako 'Celkový počet stránek primárního indexu'
,ANOIRPBR jako 'Průměrný počet řádků indexu na základní řádek'
,TNOOCILFQ jako 'Celkový počet objektových buněk na úrovni 0 pro vzorek dotazu'
,TNOOCIL3FQ jako 'Celkový počet objektových buněk na úrovni 3 pro vzorek dotazu'
,TNOOCIL4FQ jako 'Celkový počet objektových buněk na úrovni 4 pro vzorek dotazu'
,TNOOCIL0II jako 'Celkový počet objektových buněk na úrovni 0 v indexu'
,TNOOCIL4II jako 'Celkový počet objektových buněk na úrovni 4 v indexu'
,TNOIOIL3FQ jako 'Celkový počet vnitřních objektových buněk na úrovni 3 pro vzorek dotazu'
,TNOIOIL4FQ jako 'Celkový počet vnitřních objektových buněk na úrovni 4 pro vzorek dotazu'
,ITTCNTLGP jako 'Procento normalizované poměru vnitřních k celkovým buňkám vůči listové mřížce'
,INTTTCNTLGP jako 'Procento normalizované poměru protínajících se k celkovým buňkám vůči listové mřížce'
,BTTCNTLGP jako 'Procento normalizované poměru hranic k celkovým buňkám vůči listové mřížce'
,ACPONTLGP jako 'Průměrný počet buněk na objekt normalizovaný vůči listové mřížce'
,AOPG jako 'Průměrný počet objektů na listovou buňku mřížky'
,NORSBPF jako 'Počet řádků vybraných primárním filtrem'
,NORSBIF jako 'Počet řádků vybraných interním filtrem'
a0,NOTSFIC jako 'Počet volání sekundárního filtru'
a0,NORO jako 'Počet výstupních řádků'
a0,PORNBPF jako 'Procento řádků nevybraných primárním filtrem'
a0,POPFRSBIF jako 'Procento řádků primárního filtru vybraných interním filtrem'
Z spat_idx_test_result</PRE>SEŘADIT PODLE PF_EFF
<\/P>
<\/P>
<\/P>
<\/P>
<\/P>
<\/P>
| Permutace # | Buňky na objekt | Mřížky | ms k dotazu celé geometrie (Úroveň 1) | ms k dotazu celé geometrie (Úroveň 2) | ms k dotazu celé geometrie (Úroveň 3) | ms k dotazu celé geometrie (Úroveň 4) | ms k provedení prostorového dotazu (Úroveň 1) | ms k provedení prostorového dotazu (Úroveň 2) | ms k provedení prostorového dotazu (Úroveň 3) | ms k provedení prostorového dotazu (Úroveň 4) | Efektivita primárního filtru | Efektivita interního filtru | Velikost mřížky Úroveň 1 | Velikost mřížky Úroveň 2 | Velikost mřížky Úroveň 3 | Velikost mřížky Úroveň 4 | Celkový počet řádků primárního indexu | Celkový počet stránek primárního indexu | Průměrný počet řádků indexu na základní řádek | Celkový počet objektových buněk na úrovni 0 pro vzorek dotazu | Celkový počet objektových buněk na úrovni 3 pro vzorek dotazu | Celkový počet objektových buněk na úrovni 4 pro vzorek dotazu | Celkový počet objektových buněk na úrovni 0 v indexu | Celkový počet objektových buněk na úrovni 4 v indexu | Celkový počet vnitřních objektových buněk na úrovni 3 pro vzorek dotazu | Celkový počet vnitřních objektových buněk na úrovni 4 pro vzorek dotazu | Procento normalizované poměru vnitřních k celkovým buňkám vůči listové mřížce | Procento normalizované poměru protínajících se k celkovým buňkám vůči listové mřížce | Procento normalizované poměru hranic k celkovým buňkám vůči listové mřížce | Průměrný počet buněk na objekt normalizovaný vůči listové mřížce | Průměrný počet objektů na listovou buňku mřížky | Počet řádků vybraných primárním filtrem | Počet řádků vybraných interním filtrem | Počet volání sekundárního filtru | Počet výstupních řádků | Procento řádků nevybraných primárním filtrem | Procento řádků primárního filtru vybraných interním filtrem |
This tento příspěvek se ani nedotýká povrchu ladění Spatial Index. Například, pokud používáte SQL 2012, můžete nastavit index na
Auto Grid, který vám poskytne 8 Cell Levels a údajně je to dobré spojení pro ArcGIS. Také byste měli zvážit další faktory výkonu, jako je Internal Filter Efficiency. Ladění Spatial Index je plné Witch Magic a Snake Oil Medicine. Doufám, že vám tento blogový příspěvek pomůže začít správným směrem!