今天老板在我电脑上,打开SQL Server查询器,输入 select fID from tabKit , 查询结果是77000行,用时显示的1秒钟。他让我必须优化在1秒钟之内。于是,我找遍各大网络:
1. 该语句查询,在我工作的电脑上是1.6秒钟
2.在我家里的机器上不到1秒,具体多少毫秒,我不知道
3.我真的想知道,这条语句还能怎么优化?(索引已经加了,fID为主键,但是是varchar(100)类型的)求各路大神搭救:就想知道, select fID from tabKit  这条语句该怎么优化? 先谢谢谢谢,跪求答案,请各路英雄广开言路,帮忙打听下也行啊

解决方案 »

  1.   

    你的索引做得太大。我基本上不建议在varchar(100)类型的列上建索引。
    以你的例子,可以使用“加温”的方法实现。首先要保证给SQL Server分配足够的内存,然后你运行一次select fID from tabKit (俗称“加温”,即把磁盘中的页面都读取到内存缓冲),然后你再找你老板过来再运行一次select fID from tabKit 就发现速度快了很多。
      

  2.   

    晕 77000行,普通的程序界面肯定显示不下,web页面更是显示不下,你做个分页不就是了。
      

  3.   

    select fID from tabKit ---没有where条件,并且fiD是主键,你还想要再快一些
    1,如果fid仅仅是主键,而不是聚集索引的主键,那就改成聚集索引的主键;
    2,fiD从varchar(100)变为int类型,这个估计不行吧?那么就把varchar(100)变的更短一些吧,比如varchar(50);
    3,换更加NB的服务器;
    4,按照你的描述,应该是链接到服务器上执行的那句话吧,1秒应该还含有网络传输时间,因为SQL Server的网络传输用的是TCP/IP协议,所以呢,网络要整下。
    5,想看SQL Server在执行的时候实际话了多少时间,可以set statistics time on/off 这样看;
    但是呢,综上所述,我想说的是:你仅仅是想把那条语句从1秒变到更短,个人觉得,没意义
      

  4.   

    具体问题具体分析了,单单这句很难找到慢在哪了
    打开查询分析,按Ctrl+ L将执行计划贴出来看看
      

  5.   

    大哥们,人家都说了就一句话:select fID from tabKit ; 而且fiD是主键,执行计划有什么好看的,肯定是clustered scan啊
    单个的这句话,个人觉得没什么优化的意义。