【向高人提问】超大数据量导致的奇怪性能问题?

luckyleaf521 2008-01-19 11:08:56
小弟最近遇到一个头痛问题,还请高人指点。

有一个数据量超大的表table1,大约1亿条数据,并且位于链接数据库中
如果用
方式一
select 列A,列B,列C
from table1
where 列A in ('值1')
的方式查询需要3秒钟

方式二
如果把'值1'放到一个临时表TEMPTABLE中,也就是表中只有这么一个记录,再查询
select 列A,列B,列C from table1
where 列A in(
select 列1 from TEMPTABLE)
至少几分钟内出不来,停止查询都不容易

问题是这个'值1'也是查询得出的,总不能先生成类似方式一的语句再执行吧,那样好像比较笨,join的方法也试过了,不行
有没有提高速度的好办法 啊?
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
w2jc 2008-01-20
  • 打赏
  • 举报
回复
索引很重要。
另外,可以试试 exec() 把用方法1生成的查询放到里面,看看速度如何。
临时表能避免就最好不用。
charlieqiu 2008-01-20
  • 打赏
  • 举报
回复
select 列A,列B,列C from table1
where 列A in(
select 列1 from TEMPTABLE)
这种主要是临时表的问题,在执行时,对TEMPTABLE进行了全表扫描和排序,这两项用了较多资源;而第一种是直接查找的结果,所以快;用连接时,比IN要快。如果列有索引的话最好。
arrow_gx 2008-01-20
  • 打赏
  • 举报
回复
1、索引很重要
2、数据量大,也没什么办法了。只能试着优化,进行数据分表
3、数据量很大的情况,最好不要用临时表
4、你的应用可以通过分布查询,提高效率
先查出 值1 ,然后用 方法一 进行查询
分解大查询为几个小查询,动态组合SQL,并不是笨办法,对大数据量查询来说,有时候这种方法反而是最快的
csshan 2008-01-19
  • 打赏
  • 举报
回复
数据量大,也没什么办法了。只能试着优化。得到最好的结论。
就是建INDEX还花费时间呢,只能比较着来写语句了
liangCK 2008-01-19
  • 打赏
  • 举报
回复
关注,帮顶.接分.

34,590

社区成员

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

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