今天早些时候,我需要将一些小数据快速放入 SQL Server 数据库中:
CREATE VIEW MyView AS SELECT * FROM OPENJSON('[ ... ]') WITH ( colA int, etc. );
打算在某个时候返回并用真实的 、 等替换它CREATE TABLE
。INSERT INTO
SQL Server 没有采取任何明智的措施来缓存或存储这些数据,不是吗?每次查询视图时它都会解析 JSON,对吗?只是想在更换之前确认一下。
今天早些时候,我需要将一些小数据快速放入 SQL Server 数据库中:
CREATE VIEW MyView AS SELECT * FROM OPENJSON('[ ... ]') WITH ( colA int, etc. );
打算在某个时候返回并用真实的 、 等替换它CREATE TABLE
。INSERT INTO
SQL Server 没有采取任何明智的措施来缓存或存储这些数据,不是吗?每次查询视图时它都会解析 JSON,对吗?只是想在更换之前确认一下。
正确的。视图只是一个保存查询定义的对象。SQL Server 不缓存查询结果。(它只缓存大多数查询涉及的表的原始数据页。)
正确的。
OPENJSON()
它每次都必须重新处理您的查询。如果您能够通过将结果具体化到表中来替换它,那么从该表中进行查询在计算上总是比重新处理视图查询语句更容易。
如前所述,每次访问视图时,SQL Server 都需要解析它。
更好的选择是使用
(VALUES
虚拟表构造函数。例如:
好吧,我刚刚意识到我可以这样做:
SQL Server 不是我的第一个 DBMS,我想我将
SELECT INTO
AND混为一谈INSERT INTO SELECT
。我想不提供这个似乎有点奇怪
CREATE TABLE AS SELECT
。