首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

inner join 在数据量大时的查询优化有关问题

2013-01-08 
inner join 在数据量大时的查询优化问题?----------------------------Cards表有30000多条数据cardSale表

inner join 在数据量大时的查询优化问题?
----------------------------
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' 超时已过期 】

[解决办法]
你这个数据量一点都不大,可以考虑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上创建非聚集索引试试。
[解决办法]
同意楼上的。
[解决办法]
这个不是数据库查询超时,而是你指定了太短的超时时间。
[解决办法]
先在数据库里单独执行SQL语句,看看时间多少。如果时间很长,请参考1楼的的办法修改。
如果单独执行很快,那么就不是SQL的问题了,关注下你的asp程序,可以开启数据库后台跟踪sql server profiler,看看代码实际执行情况。
[解决办法]
select a.* from cardSale a inner join cards b on a.cardID=b.cardID where a.payment=1 order by a.id asc

可以是没有索引 cardid上建索引试试。

[解决办法]
不用a.* ,把要查的字段一个一个写出来

热点排行
Bad Request.