两张表要做链接查询,连接字段是Time,类型是datetime,例2012-07-24 19:41:02.000现在的问题是两张表的时间字段不完全相同,就是秒数不同,相差几秒,精确到分是想相同的。所以两个表连接的同时还要对时间字段做处理。我写的SQL如下:select table.Time,field1,field2,……
from table1,table2 where  datediff(dd,table1.Time,'2012-12-03')=0 
and datepart(mi,[1].Time) = 00 and left([1].Time,18)=left([2].Time,18);目的是为了把两张表中精确到分的整点数据取出来,一共24条,每小时一条。这条语句查询效率很低,有10万多条数据,我查了一下要2~3分钟才能查出来,做个报表系统查张报表要几分钟这个效率也太低了点。请问高手该如何优化!!主要时间耗费在链接查询上。

解决方案 »

  1.   

    SQLServer的话可以转成double来处理试试,在查询分析器中试试转两个datetime出来看就清楚了。
      

  2.   

    试试这个,字段Time建索引select t1.*, t2.*
    from table1 t1,table2 t2
    where t1.Time >= '20121203' and t1.Time < DATEADD(d, 1, '20121203')
    and datepart(mi, t1.Time) = '00'
    and t2.Time >= DATEADD(mi,DATEDIFF(mi,0,t1.Time),0) and t2.Time < DATEADD(mi,DATEDIFF(mi,0,DATEADD(mi,1,t1.Time)),0)
      

  3.   

    老问题了。1.单独对Time建立索引2.我存时间都存long型的PS:方法1可以使你原来2-3分钟的操作变成几百毫秒
       方法2在方法1的基础上锦上添花
      

  4.   


    针对我写的那个sql语句能告诉我怎么建立时间索引吗,我半路转学计算机,不是太懂,谢谢
      

  5.   

    一般不要用如下的字句: "IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", and "LIKE '%500'",因为他们不走索引全是表扫描。
      

  6.   

    select a.*,b.*  from t1 as a join t2 as b on a.codeid=b.codeid 
    where a.Time>='日期' and a.time<'日期' 
    AND b.time>=DATEADD(day,0,CONVERT(varchar(12),b.time,23)) 
    and b.time<DATEADD(day,0,CONVERT(varchar(12),b.time,23))