oracle 查询

肚皮向上的鱼 2014-08-19 09:49:09
假如我现在有一张表,末尾有一个字段“status”,每次添加一条新记录的时候,这个状态就是0。需要做数据处理时,我就去搜索这张表,遇到状态为0的,处理,然后把状态改为1,就是处理完了。我的问题是,如果表的记录数有限,那么还好,可是随着数据越来越多,如果有上万条,难道我每次都要对整张表进行查询,一条一条的查询下去,如果状态为0,处理吗?如果数据很多,感觉这样很慢啊,有没有另外好的方法或什么的?我现在是用这样:
select * from 表名 where 'status' = 0;
然后用resultset处理
...全文
208 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
肚皮向上的鱼 2014-08-25
  • 打赏
  • 举报
回复
引用 11 楼 bw555 的回复:
[quote=引用 9 楼 u011292577 的回复:] 你好,我今天模拟了数据,一共1万条,还是用select * from 表名 where 'status' = 0;发现运行时间也不慢呀!
如果不慢的话根本就不需要优化,直接这样用也可以,没啥问题[/quote] 嗯,现在先这么考虑着吧,结贴。
bw555 2014-08-21
  • 打赏
  • 举报
回复
引用 9 楼 u011292577 的回复:
你好,我今天模拟了数据,一共1万条,还是用select * from 表名 where 'status' = 0;发现运行时间也不慢呀!
如果不慢的话根本就不需要优化,直接这样用也可以,没啥问题
肚皮向上的鱼 2014-08-21
  • 打赏
  • 举报
回复
引用 8 楼 yuyeyi 的回复:
为毛要用status ,用时间戳
请指教,详细说说
肚皮向上的鱼 2014-08-21
  • 打赏
  • 举报
回复
引用 7 楼 bw555 的回复:
[quote=引用 6 楼 zlloct 的回复:] [quote=引用 4 楼 u011292577 的回复:] [quote=引用 3 楼 zlloct 的回复:] [quote=引用 楼主 u011292577 的回复:] 假如我现在有一张表,末尾有一个字段“status”,每次添加一条新记录的时候,这个状态就是0。需要做数据处理时,我就去搜索这张表,遇到状态为0的,处理,然后把状态改为1,就是处理完了。我的问题是,如果表的记录数有限,那么还好,可是随着数据越来越多,如果有上万条,难道我每次都要对整张表进行查询,一条一条的查询下去,如果状态为0,处理吗?如果数据很多,感觉这样很慢啊,有没有另外好的方法或什么的?我现在是用这样: select * from 表名 where 'status' = 0; 然后用resultset处理
建索引[/quote] 你好,能详细说说吗?[/quote] 其实最好的办法不是建索引,因为你要对表进行更改,更改的同时也需要处理索引。最好的办法是分成两个表,拿一个表专门来存储未处理的数据,处理完一个就转移到处理完的表(状态为1,好比为历史表)[/quote] 这个确实也是一个不错的方法 如果程序还在设计期,程序还没进行开发,这个确实可以作为首选方案 如果程序已经开发完成,并已经投入使用的话,就需要平衡一下利弊关系了 1、建两个表,需要调整数据结构,调整程序 2、建索引,插入更新的速度会有所降低 [/quote] 你好,我今天模拟了数据,一共1万条,还是用select * from 表名 where 'status' = 0;发现运行时间也不慢呀!
yuyeyi 2014-08-21
  • 打赏
  • 举报
回复
为毛要用status ,用时间戳
bw555 2014-08-19
  • 打赏
  • 举报
回复
引用 6 楼 zlloct 的回复:
[quote=引用 4 楼 u011292577 的回复:] [quote=引用 3 楼 zlloct 的回复:] [quote=引用 楼主 u011292577 的回复:] 假如我现在有一张表,末尾有一个字段“status”,每次添加一条新记录的时候,这个状态就是0。需要做数据处理时,我就去搜索这张表,遇到状态为0的,处理,然后把状态改为1,就是处理完了。我的问题是,如果表的记录数有限,那么还好,可是随着数据越来越多,如果有上万条,难道我每次都要对整张表进行查询,一条一条的查询下去,如果状态为0,处理吗?如果数据很多,感觉这样很慢啊,有没有另外好的方法或什么的?我现在是用这样: select * from 表名 where 'status' = 0; 然后用resultset处理
建索引[/quote] 你好,能详细说说吗?[/quote] 其实最好的办法不是建索引,因为你要对表进行更改,更改的同时也需要处理索引。最好的办法是分成两个表,拿一个表专门来存储未处理的数据,处理完一个就转移到处理完的表(状态为1,好比为历史表)[/quote] 这个确实也是一个不错的方法 如果程序还在设计期,程序还没进行开发,这个确实可以作为首选方案 如果程序已经开发完成,并已经投入使用的话,就需要平衡一下利弊关系了 1、建两个表,需要调整数据结构,调整程序 2、建索引,插入更新的速度会有所降低
CT_LXL 2014-08-19
  • 打赏
  • 举报
回复
引用 4 楼 u011292577 的回复:
[quote=引用 3 楼 zlloct 的回复:] [quote=引用 楼主 u011292577 的回复:] 假如我现在有一张表,末尾有一个字段“status”,每次添加一条新记录的时候,这个状态就是0。需要做数据处理时,我就去搜索这张表,遇到状态为0的,处理,然后把状态改为1,就是处理完了。我的问题是,如果表的记录数有限,那么还好,可是随着数据越来越多,如果有上万条,难道我每次都要对整张表进行查询,一条一条的查询下去,如果状态为0,处理吗?如果数据很多,感觉这样很慢啊,有没有另外好的方法或什么的?我现在是用这样: select * from 表名 where 'status' = 0; 然后用resultset处理
建索引[/quote] 你好,能详细说说吗?[/quote] 其实最好的办法不是建索引,因为你要对表进行更改,更改的同时也需要处理索引。最好的办法是分成两个表,拿一个表专门来存储未处理的数据,处理完一个就转移到处理完的表(状态为1,好比为历史表)
bw555 2014-08-19
  • 打赏
  • 举报
回复
在status字段上建索引应该就可以了
肚皮向上的鱼 2014-08-19
  • 打赏
  • 举报
回复
引用 3 楼 zlloct 的回复:
[quote=引用 楼主 u011292577 的回复:] 假如我现在有一张表,末尾有一个字段“status”,每次添加一条新记录的时候,这个状态就是0。需要做数据处理时,我就去搜索这张表,遇到状态为0的,处理,然后把状态改为1,就是处理完了。我的问题是,如果表的记录数有限,那么还好,可是随着数据越来越多,如果有上万条,难道我每次都要对整张表进行查询,一条一条的查询下去,如果状态为0,处理吗?如果数据很多,感觉这样很慢啊,有没有另外好的方法或什么的?我现在是用这样: select * from 表名 where 'status' = 0; 然后用resultset处理
建索引[/quote] 你好,能详细说说吗?
CT_LXL 2014-08-19
  • 打赏
  • 举报
回复
引用 楼主 u011292577 的回复:
假如我现在有一张表,末尾有一个字段“status”,每次添加一条新记录的时候,这个状态就是0。需要做数据处理时,我就去搜索这张表,遇到状态为0的,处理,然后把状态改为1,就是处理完了。我的问题是,如果表的记录数有限,那么还好,可是随着数据越来越多,如果有上万条,难道我每次都要对整张表进行查询,一条一条的查询下去,如果状态为0,处理吗?如果数据很多,感觉这样很慢啊,有没有另外好的方法或什么的?我现在是用这样: select * from 表名 where 'status' = 0; 然后用resultset处理
建索引
肚皮向上的鱼 2014-08-19
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
可否考虑按照数据的录入时间做oracle分区表 然后记录上次开始处理的时间 查询的时候只查询上次处理之后的记录 这样查询的时候只需要访问最近的一个或两个时间分区就可以了 不过看你的记录只是上万条,考虑增加索引提升查询速度应该就可以了
你的意思是不是select * from 表名 where 字段=? 字段 = ? 这样的索引吗
bw555 2014-08-19
  • 打赏
  • 举报
回复
可否考虑按照数据的录入时间做oracle分区表 然后记录上次开始处理的时间 查询的时候只查询上次处理之后的记录 这样查询的时候只需要访问最近的一个或两个时间分区就可以了 不过看你的记录只是上万条,考虑增加索引提升查询速度应该就可以了

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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