技術(shù) 點
- 技術(shù)
- 點
- V幣
- 點
- 積分
- 10834
|
本帖最后由 lwwvb 于 2015-3-1 00:23 編輯
今天看到一個快速開發(fā)ACCESS的平臺,說里面自動生成的窗體是非綁定表的。原因是使用綁定表,并發(fā)用戶數(shù)多了,數(shù)據(jù)量大了會慢。
但是,造成這個慢的原因,道理也許是:
原因一:可能后臺使用ACCESS 數(shù)據(jù)庫。
原因二:DAO方式,而且使用ODBC接口,造成性能不佳。
原因三:設(shè)計不合理。
但如果我們使用ADP,多用戶時,后臺選用SQL SERVER,ADP一定是使用ADO的,再加上合理的設(shè)計。
在多用戶并發(fā),多數(shù)據(jù)時,會不會慢呢?比ODBC+MDB的方式好多少?
只因沒有做過這樣的多用戶的工程,不能了解其中。
有經(jīng)驗的朋友可以討論一下,用ADP時,你們使用綁定表,還是非綁定表?如果用戶并發(fā)不是非常多的情況下,是否綁定表還是首選?
補充一下:后臺同樣是SQL 2008中,使用SQL SERVER PRO PROFILER監(jiān)視,設(shè)計一個簡單的主從表窗體。使用MDB+ODBC 方式中,打開主從窗體,看到SQL 2008要花下面SQL指令。
exec sp_unprepare 3
go
exec sp_unprepare 4
go
SELECT "dbo"."學(xué)生"."學(xué)號" FROM "dbo"."學(xué)生"
go
declare @p1 int
set @p1=5
exec sp_prepexec @p1 output,N'@P1 nvarchar(50)',N'SELECT "學(xué)號","姓名","年齡" FROM "dbo"."學(xué)生" WHERE "學(xué)號" = @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 = "學(xué)號" ) ',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 "學(xué)號","姓名","年齡" FROM "dbo"."學(xué)生" WHERE "學(xué)號" = @P1 OR "學(xué)號" = @P2 OR "學(xué)號" = @P3 OR "學(xué)號" = @P4 OR "學(xué)號" = @P5 OR "學(xué)號" = @P6 OR "學(xué)號" = @P7 OR "學(xué)號" = @P8 OR "學(xué)號" = @P9 OR "學(xué)號" = @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"."學(xué)生"
go
SET ROWCOUNT 0
go
SET FMTONLY ON select "學(xué)號" 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 = "學(xué)號"))',1
select @p1
goSET ROWCOUNT 10000
goexec sp_executesql N'SELECT * FROM "dbo"."成績" WHERE ((@P1 = "學(xué)號"))',N'@P1 nvarchar(2)',N'C2'
go
SET ROWCOUNT 0
go
EXEC sp_MShelpcolumns N'成績', NULL, N'id', 1
go
看來,ODBC和ADP效率差很遠(yuǎn)。。。
|
|