铁匠

做人要低调
随笔 - 133, 评论 - 255 , 引用 - 184

导航

公告

文章分类

存档

随笔分类

相册

BLOG

网站

论坛

用TOP来加速SQL

经常看到SQL里面写着Select * from Table where ID = 123,而同时又经常有人报怨系统的性能很差:查一条记录当有海量数据的时候,要用好几分钟。而事实上在程序员在开发的时候,多写几个字母就可以让你的SQL执行得快一些:把刚才的那句改成:Select Top 1 * from where ID = 123 Table再看效果,速度有质的提高。
让我们来看一组数据:当数据表里面的记录只有几十条的时候:没有使用TOP时,执行1000次的查询用时要用1032ms;同时如果合用了TOP来查询只需要922ms就可以完成这1000次的查询了。也许你可以认为性能提高不明显。让我们再看一组数据吧,当数据库里面有三十几万条记录的时候,执行一次的查询(这时候查询比较耗时了,所以作一次就够显示时间了)没有使用TOP的时候要耗时7515ms,而使用了TOP后,只用了201ms就完成了这一次查询。测试过程中的执行代码如下:
var
  I: Integer;
  nRunCount: Cardinal;
  nStartTime: Cardinal;
  nRunTime: Cardinal;
begin
  nRunCount := StrToInt(edtRunCount.Text);
  nStartTime := GetTickCount;
  for I := 1 to nRunCount do
  with ADOQuery1 do
  begin
    Close;
    SQL.Text := edtSQL.Text;
    ExecSQL;
  end;
  nRunTime := GetTickCount - nStartTime;
  ShowMessage(Format('运行了:%d ms', [nRunTime]));
分析:之所以存在这么大的差异,很可能是由于当数据库查询到一条记录后,如果没有使用TOP1的时候,它还会接着往下查找,所以要多使用时间,而如果使用了TOP1这时候就不接着往下查找。

发表于 2005年6月17日 12:35

评论

# re:用TOP来加速SQL

用TOP来加速SQLooeess
2005-7-16 7:12 | 红外热像仪

# re: 用TOP来加速SQL

好主意啊
2005-9-5 10:17 | 111

# re: 用TOP来加速SQL

我想除非你的ID不是PrimaryKey (我想数据管理程序不会连识别是不是identify都做不到的,既然知道是identify的,那么发现一条就不应该有第二条了 呵呵 )而且业务需求是我们 只需一条返回值时 呵呵
腰部实用性不大 不过GoodIdea
个人愚见

# re: 用TOP来加速SQL

对于没有idenfity的字段这个注意不错 哦
2008-7-24 10:15 | kendarkfire

Post Comment

主题  
姓名  
主页
校验码  
内容   
京ICP备 05050892号