SQL Server:查询应用在 where 子句中,包含 Json 对象的列上的 IS NOT Null 需要更多时间
Posted
技术标签:
【中文标题】SQL Server:查询应用在 where 子句中,包含 Json 对象的列上的 IS NOT Null 需要更多时间【英文标题】:SQL Server : query apply in where clause with IS NOT Null on Column that contains Json Object taking more time 【发布时间】:2018-03-23 05:31:01 【问题描述】:我在 SQL Server 数据库中有一个表,其中列包含 JSON 对象,并且我使用 openJson JSON_Value 和 JSON_Query 函数遍历 where 子句条件和 IN NOT NULL 的列。查询运行成功,但需要更多时间响应输出。仅 4 行,耗时 7 秒。 那么如果表有 1000 行呢?
表格看起来是这样的:
这是我正在使用的表上的查询:
SELECT TOP (1000)
[Id], JSON_Value(objectJson,'$.Details.Name.Value') AS objectValue
FROM
[geodb].[dbo].[userDetails]
WHERE
JSON_QUERY(jsonData,'$."1bf1548c-3703-88de-108e-bf7c4578c912"') IS NOT NULL
那么,如何优化上述查询以减少时间?
【问题讨论】:
【参考方案1】:我建议更改表格:
ALTER TABLE dbo.Table
ADD Value AS JSON_VALUE(JsonData, '$.Details.Name.Value');
然后在值列上创建一个非聚集索引
CREATE NONCLUSTERED INDEX IX_ParsedValue ON dbo.Table (Value)
这将加快查询速度。
【讨论】:
感谢您的回复。但我不应该更改现有表。您能帮我换一种方式吗? 我在表上应用了插入触发器并展平Json,然后在新创建的表上应用了非聚集索引。以上是关于SQL Server:查询应用在 where 子句中,包含 Json 对象的列上的 IS NOT Null 需要更多时间的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:查询应用在 where 子句中,包含 Json 对象的列上的 IS NOT Null 需要更多时间
where 子句中使用的 SQL Server 查询性能视图