小弟用delphi编程,数据库是sqlserver2005,有一个模块是在界面初始化的时候就要查询出最大编号、人员和原因。其中原因和人员在同一张表中的同一个字段,靠另一个字段来区分。而最大编号在另一张表中。现在小弟在客户端用三次查询来完成,但是每次界面初始化要二十多秒,耗时太长。现在想请教各位前辈,能不能提高客户端的速度,或是将三个查询变成一个,减少查询次数?抑或各位有另外的办法?
下面是sql代码:
select distinct code1 from other where codegroup='man'
select distinct code1 from other where codegroup='reason'
Select max(recno) as recno from out where len(recno)=8 and left(recno,4)=year(current_timestamp)

解决方案 »

  1.   

    select  code1 from other where codegroup='man' group by code1codegroup字段和code1字段加索引
      

  2.   

    select  code1 from other where codegroup='man' group by code1codegroup字段和code1字段加索引
      

  3.   

    1.lz的第一和第二条SQL能否用union all连接。。
    2.建议给where条件后的字段加上索引。
    3.最耗时的估计是第三条SQL
      

  4.   

    1.lz的第一和第二条SQL能否用union all 连接呢。
    2.建议lz给where条件后的字段加索引。
    3.最耗时的应该在第三条SQL。但不知道第三条SQL是完成什么业务功能的。
      

  5.   

    因为other这张表总共只有60条左右数据,加索引对于速度应该没有很大影响。
      

  6.   

    因为other这张表总共只有60条左右数据,加索引对于速度应该没有很大影响。
      

  7.   

    1、如果union all 以后,在程序中要再把它们分开就难了吧?我希望最好把这三个值变成一张新表的三个字段,那样就不会冲突。不过这样可能需要用到full outer join两次,我担心速度会更慢(现在的out表有几万条记录)。
    2、第三条sql的recno字段加索引确实可能快一点
    3、主要实现一个登记功能,查询到最大编号以便新增登记的时候编号自增
      

  8.   

    Select max(recno) as recno from out where len(recno)=8 and left(recno,4)=year(current_timestamp)
    建议建out表时,多加字段lenRecNO,int型,数值=len(recno),
    这样在查询时速度会快很多,
    后面left(recno,4)=year(current_timestamp)最好改为:
    @str="recno like '" + year(current_timestamp) + "%'"这样的形势。当然建表时多加字段:recnoL4,char(4),数值=left(recno,4)这样更好,虽然数据有点冗余,但对查询更有利。建数据库结构很重要,为了后期的报表,有时不得不多加冗余字段。