关于优化查询的问题,请高手赐教

[复制链接]
查看11 | 回复9 | 2006-1-10 14:41:39 | 显示全部楼层 |阅读模式
如果表中有10W条数据,其中一个字段是AGE
我想查AGE19的,SQL写成这样
select age from table where age19
感觉这样会很慢,有什么方法能缩短查询时间呢?
我想到一个办法,就是先取出表中一部分数据,放到临时表里,从临时表里查,然后删除临时表,然后再取另外一部分数据,如此循环,不知道是否可行。
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
select age from table where age19
=>
select age from table where age>19 or age
select age from table where age>19
union all
select age from table where age<19
(age上有建立索引)
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
这样做的原因是什么?
使用索引的时候,查询出的结果应该是总纪录的2-4% ,超过这个比例会影响查询速度的
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
那在SQL语句本身就没什么好优化的了,就要看看慢在什么地方了,SGA、磁盘I/O还是网络还是其他什么,你的SQL是存储过程里还是用还是应用程序里,这些环境都要交待一下。
10W数据服务器好的话应该不算什么。
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
不好意思,我说的10W条数据只是打个比方,如果是千W条呢?
这个问题是今天培训的时候项目经理给的,我自己想了想也没什么好办法
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
select age from table where age not in ('19')
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
最初由 nan_csn 发布
[B]select age from table where age not in ('19') [/B]

能说明一下你这么写的道理吗?
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
你说的临时表方式适合外部应用程序进行,但是在存储过程中就未必有效,也许还不如一个大回滚段的好。
另外由于你的查询语句的返回结果只是age列,那么使用索引的话就有可能直接在index上进行scan,不用作full table scan,相对来所消耗资源会小些。
只想到这些了...
记得把你项目经理的解答贴回上来给我们学习一下啊.
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
我也看过相关的优化资料,基本上就是对索引的建立
我自己试验一下吧
如果我们头给的答案比较好,我一定会发上来的
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
试试MINUS
select age from table
MINUS
select age from table where age=19
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行