导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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

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的方法也试过了,不行
有没有提高速度的好办法 啊?
...全文
42 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
关注,帮顶.接分.
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告