在同一服务器上的另一个 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 的建议 - 查看活动监视器。 除了这个没有什么奇怪的:
尽可能隔离代码后,看来问题出在打开
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
),一切都会恢复正常并快速运行。