有一个奇怪的问题?(30分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是mssql7,dbo.salary_storage1大约有6000条记录,如果在Button1
的Click事件写为:
with query1 do
begin
close;
sql.clear;
sql.add('SELECT id, salary_no, name,postalcode,area_id,
units, quantity, p_level_id, sign');
sql.add('FROM dbo.Salary_Storage1 Dbo_salary_storage1 order by salary_no');
open;
end;

with query2 do
begin
close;
sql.clear;
sql.add('select count(*) from salary_storage1
Dbo_Salary_Storage1');
open;
end;
edit1.Text:='共有'+query2.Fields[0].Text+'条数据';

一执行button1时,发现要用8秒多。如果是这样写:
with query2 do
begin
close;
sql.clear;
sql.add('select count(*) from salary_storage1
Dbo_Salary_Storage1');
open;
end;
edit1.Text:='共有'+query2.Fields[0].Text+'条数据';

with query1 do
begin
close;
sql.clear;
sql.add('SELECT id, salary_no, name,postalcode,area_id,
units, quantity, p_level_id, sign');
sql.add('FROM dbo.Salary_Storage1 Dbo_salary_storage1
order by salary_no');
open;
end;

奇怪只用1秒,这是为什么?谁能够解释一下?
 
从缓存的角度理解这个现象也许能解释得通,
select *总是最快的,前一步等于已经将两个数据表调入缓存了
 
难道没有人知道吗?
 
同时补充一下:这是在win2000 高级服务器+Mssql7标准版上运行,是在单
机上运行,并不是在网络上运行的。
 
iie说的对,
这是SQL服务器页调度的功劳。
大凡数据库专家均了解数据库的内部调度、管理、配置。
系统作出来容易,但真正的优化潜力还是很大的。
我们通常只是完成任务就行,容易忽略许多问题。
许多情况代码完成相同功能,稍稍一个前后顺序就可以解决根本问题。
select count *,从磁盘调入,并将SQL服务器已经将页面调度到CATCH,
select f1, f2 .... 从catch中操作,速度很快,。
如果先select f1, f2 .... ,在从磁盘调度同时要排序,过滤字段。而select count(*)只计算索引值。
 
同意, 就是 cache 的功劳, 如果你的系统的内存大一些, 如 1G, 速度会更快
 
用sql monitor查看具体的sql语句的执行情况.
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
334
import
I
I
回复
0
查看
653
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部