----------------------------
Cards表有30000多条数据
cardSale表有20000多条数据
--------------------------t-sql
select a.* from cardSale a inner join cards b on a.cardID=b.cardID where a.payment=1 order by a.id asc查询时间 55秒
asp程序报错 【Microsoft OLE DB Provider for SQL Server 错误 '80040e31' 超时已过期 】

解决方案 »

  1.   

    你这个数据量一点都不大,可以考虑asp那里的超时加长一点。优化的根据应该是看执行计划。你先贴出来吧。这个语句或者换成这个试试:SELECT  a.*
    FROM    cardSale a
    WHERE   a.payment = 1
            AND EXISTS ( SELECT 1
                         FROM   cards b
                         WHERE  a.cardID = b.cardID )
    --ORDER BY a.id ASC
    在cardSale 的id上创建一个asc的聚集索引。这样可以避免order by的开销。另外,在两表的cardid上创建非聚集索引试试。
      

  2.   

    先在数据库里单独执行SQL语句,看看时间多少。如果时间很长,请参考1楼的的办法修改。
    如果单独执行很快,那么就不是SQL的问题了,关注下你的asp程序,可以开启数据库后台跟踪sql server profiler,看看代码实际执行情况。
      

  3.   

    select a.* from cardSale a inner join cards b on a.cardID=b.cardID where a.payment=1 order by a.id asc可以是没有索引 cardid上建索引试试。