|
本帖最后由 lwwvb 于 2015-3-1 00:23 编辑
今天看到一个快速开发ACCESS的平台,说里面自动生成的窗体是非绑定表的。原因是使用绑定表,并发用户数多了,数据量大了会慢。
但是,造成这个慢的原因,道理也许是:
原因一:可能后台使用ACCESS 数据库。
原因二:DAO方式,而且使用ODBC接口,造成性能不佳。
原因三:设计不合理。
但如果我们使用ADP,多用户时,后台选用SQL SERVER,ADP一定是使用ADO的,再加上合理的设计。
在多用户并发,多数据时,会不会慢呢?比ODBC+MDB的方式好多少?
只因没有做过这样的多用户的工程,不能了解其中。
有经验的朋友可以讨论一下,用ADP时,你们使用绑定表,还是非绑定表?如果用户并发不是非常多的情况下,是否绑定表还是首选?
补充一下:后台同样是SQL 2008中,使用SQL SERVER PRO PROFILER监视,设计一个简单的主从表窗体。使用MDB+ODBC 方式中,打开主从窗体,看到SQL 2008要花下面SQL指令。
exec sp_unprepare 3
go
exec sp_unprepare 4
go
SELECT "dbo"."学生"."学号" FROM "dbo"."学生"
go
declare @p1 int
set @p1=5
exec sp_prepexec @p1 output,N'@P1 nvarchar(50)',N'SELECT "学号","姓名","年龄" FROM "dbo"."学生" WHERE "学号" = @P1',N'C2'
select @p1
go
exec sp_execute 5,N'C2'
go
select 504,c.name,c.description,c.definition from master.dbo.syscharsets c where c.id = convert(tinyint, databasepropertyex ( db_name() , 'sqlcharset'))
go
exec sp_executesql N'SELECT "窗体2"."ID" FROM "dbo"."成绩" "窗体2" WHERE ( @P1 = "学号" ) ',N'@P1 varchar(510)','C2'
go
exec sp_execute 5,N'C2'
go
declare @p1 int
set @p1=6
exec sp_prepexec @p1 output,N'@P1 nvarchar(50),@P2 nvarchar(50),@P3 nvarchar(50),@P4 nvarchar(50),@P5 nvarchar(50),@P6 nvarchar(50),@P7 nvarchar(50),@P8 nvarchar(50),@P9 nvarchar(50),@P10 nvarchar(50)',N'SELECT "学号","姓名","年龄" FROM "dbo"."学生" WHERE "学号" = @P1 OR "学号" = @P2 OR "学号" = @P3 OR "学号" = @P4 OR "学号" = @P5 OR "学号" = @P6 OR "学号" = @P7 OR "学号" = @P8 OR "学号" = @P9 OR "学号" = @P10',N'C1',N'C3',N'C3',N'C3',N'C3',N'C3',N'C3',N'C3',N'C3',N'C3'
select @p1
go
同一个条件,使用ADP,打开主从窗体要花下面SQL指令。
SET ROWCOUNT 10000
go
SELECT * FROM "dbo"."学生"
go
SET ROWCOUNT 0
go
SET FMTONLY ON select "学号" from "dbo"."成绩" WHERE 1=2 SET FMTONLY OFFdeclare @p1 int
set @p1=1
exec sp_prepare @p1 output,N'@P1 nvarchar(50)',N'SELECT * FROM "dbo"."成绩" WHERE ((@P1 = "学号"))',1
select @p1
goSET ROWCOUNT 10000
goexec sp_executesql N'SELECT * FROM "dbo"."成绩" WHERE ((@P1 = "学号"))',N'@P1 nvarchar(2)',N'C2'
go
SET ROWCOUNT 0
go
EXEC sp_MShelpcolumns N'成绩', NULL, N'id', 1
go
看来,ODBC和ADP效率差很远。。。
|
|