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

quweiie 2012-12-11 11:22:05
----------------------------
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' 超时已过期 】
...全文
1559 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
langxingcs 2012-12-11
  • 打赏
  • 举报
回复
同意楼上的。
發糞塗牆 2012-12-11
  • 打赏
  • 举报
回复
你这个数据量一点都不大,可以考虑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上创建非聚集索引试试。
小猴168 2012-12-11
  • 打赏
  • 举报
回复
不用a.* ,把要查的字段一个一个写出来
zhengnan2012 2012-12-11
  • 打赏
  • 举报
回复
select a.* from cardSale a inner join cards b on a.cardID=b.cardID where a.payment=1 order by a.id asc 可以是没有索引 cardid上建索引试试。
gogodiy 2012-12-11
  • 打赏
  • 举报
回复
先在数据库里单独执行SQL语句,看看时间多少。如果时间很长,请参考1楼的的办法修改。 如果单独执行很快,那么就不是SQL的问题了,关注下你的asp程序,可以开启数据库后台跟踪sql server profiler,看看代码实际执行情况。
专注or全面 2012-12-11
  • 打赏
  • 举报
回复
这个不是数据库查询超时,而是你指定了太短的超时时间。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧