我有一个带有几何列的SQL Server 2012数据库表,并且该表上有一个空间索引。
我有一个SQL查询,我运行它来做一些地理空间分析(交叉/包含),并且强制使用空间索引时查询执行的性能差别很大(根据this answer取决于我使用的表的大小)。我的桌子只有1-2K的多边形和1-2K的点数。
因此,我在SQL查询中使用node = svg
.selectAll(".node")
.data(nodes, function (d) { return d.name; });
var nodeEnter = node
.enter()
.append("g")
.attr("class", "node");
nodeEnter
.append("circle")
.attr("r", 5);
,其中WITH (INDEX(S7_idx))
是我的空间索引的名称。
但是,当我将在具有相同表的另一个数据库上执行此SQL查询时,Spatial索引可能具有另一个名称。所以,我不想硬编码索引名称。我认为如果我可以动态检索索引值会很好,因为我可以确定表上只有一个空间索引。
S7_idx
结果:
select name from sys.indexes
where object_id = (select object_id from sys.objects where name = 'TableName')
AND type_desc = 'SPATIAL'
大。现在我想在
name
S7_idx
语句中使用此值而不是硬编码索引名称。我该怎么做?
我认为我无法在WITH
语句中使用动态SQL(EXECUTE sp_executesql
)。
答案 0 :(得分:1)
除非您有经验丰富的DBA建议,否则永远不建议使用statistics
。保持hint
数据可以解决很多问题。
如果您确定使用了DECLARE @sql VARCHAR(8000)= ''
SET @sql = 'SELECT *
FROM TableName
WITH (INDEX('
+ (SELECT NAME
FROM sys.indexes
WHERE object_id = (SELECT object_id
FROM sys.objects
WHERE NAME = 'TableName')
AND type_desc = 'SPATIAL')
+ '))'
PRINT @sql
EXEC(@sql)
,那么您需要使用动态查询
index
注意:以上查询在您的表格中考虑只有一个type_desc = 'SPATIAL'
data() {
return {
headings: ['id','remark'],
rows: [
{
id: 1,
FirstName: 'Jhon',
LastName: 'Doe',
remark: 0
},
{
id: 2,
FirstName: 'Foo',
LastName: 'Bar',
remark: 1
}
]
}}