两个数据库之间的 SQL View 速度极慢

问题描述 投票:0回答:1

在同一服务器上的另一个 SQL Server 数据库中查询表的视图上运行简单的 SQL 查询时,我遇到了主要的性能问题。

我有两个数据库,

db1
(包含
table1
,其中只有 165 行货币(很小))和
db2
,我想在其中创建视图。

db2
中,我创建了视图:

select * 
from db1.dbo.table1

(如果我尝试用

select * from db1.table1
创建它,它不起作用)。

当我通过 SQL Server Management Studio 与我的

dbuser
用户连接时,没有遇到任何问题,并且 db2 中查询 db1 的视图会立即运行。
dbuser
确实可以连接并读取该服务器的所有数据库。

当我通过代码(ASP 经典)查询此视图时,使用

dbuser
作为连接字符串 (
Driver={SQL Server};Server=XXX;Database=db2;uid=dbuser;pwd=XXX
) 中的用户,针对此视图的查询需要很长时间才能执行。

我确信这是一个用户权限问题,但它超出了我的范围。

您有一个可以看的起点吗?

编辑:

@siggemannen 的建议 - 查看活动监视器。 除了这个没有什么奇怪的:

sql-server asp-classic query-optimization sql-view database-permissions
1个回答
0
投票

尽可能隔离代码后,看来问题出在打开

ADODB.Recordset
对象上。

代码如下:

strSQL = "select * from currency"
conn = "Driver={SQL Server};Server=xxx;Database=db2;uid=dbuser;pwd=xxx;"

set rst = Server.CreateObject("Adodb.Recordset")
rst.Open strsql, conn, 1, 3

response.write rst.recordcount
response.write rst.fields("cur_symbol")

问题是Open

记录集方法
第一个参数(
CursorType
)。

1 =

adOpenKeyset

将其设置为 1 以利用

RecordCount
方法。 通过将其替换为 0 (
adOpenForwardOnly
),一切都会恢复正常并快速运行。

© www.soinside.com 2019 - 2024. All rights reserved.