先说明一下我对游标肤浅的认识:游标是把数据库里的特定数据逐条从硬盘搬到内存中,以便在内存中的程序进行逐条遍历。
如果是这样的话,我就不清楚游标的必要性了,相较于游标遍历,把整个结果集读取到内存中操作有什么劣势吗?
我看见有人说“用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。”我想是不是因为在程序处理过程中数据库的数据可能发生变化所以逐条读取减少处理时间,避免不同步?
谢谢大哥们指教!
先说明一下我对游标肤浅的认识:游标是把数据库里的特定数据逐条从硬盘搬到内存中,以便在内存中的程序进行逐条遍历。
如果是这样的话,我就不清楚游标的必要性了,相较于游标遍历,把整个结果集读取到内存中操作有什么劣势吗?
我看见有人说“用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。”我想是不是因为在程序处理过程中数据库的数据可能发生变化所以逐条读取减少处理时间,避免不同步?
谢谢大哥们指教!
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
只是搬几十条几百条都无所谓,但数据量是几百MB到几GB呢?
如果用的还是机械硬盘呢?几百MB就要读上好一会儿,几GB就等着按分钟算吧。
如果同时有几个请求去读几百MB数据呢?全搬进去吗?假设你的服务器有16G内存,一次读4G数据,同时来了10个请求,内存够用吗?
一次读几个MB,请求更多,GC压力不大吗?会不会OOM?