h*****6 发帖数: 866 | 1 为啥Oracle stored procedure 里面不建议用 temporary table? 谢谢。 |
B*****g 发帖数: 34098 | 2 only use tt when you have to
【在 h*****6 的大作中提到】 : 为啥Oracle stored procedure 里面不建议用 temporary table? 谢谢。
|
y****w 发帖数: 3747 | 3 谁建议的? 如果temp table解决问题最合适,为什么不用? 乱七八糟流行的坏主意多
了。有些成为坏主意就是因为不分场合的乱用,
【在 h*****6 的大作中提到】 : 为啥Oracle stored procedure 里面不建议用 temporary table? 谢谢。
|
h*****6 发帖数: 866 | 4 现在组的manager说的。
俺的工作涉及把TSQL stored procedure code转成PL SQL, 有的 TSQL stored
procedure 有两三千行代码,好几个TEMP tables, 如果PL SQL 不用TEMP table,就只
能用 Associative Array or nested table, 处理数据,最后写到表里,中间过程不用
TEMP table,都在memory内。
Stroed procedure 的功能就是把几个millions records 级别的表join在一起,做一些
很简单判别,加减,再写进原来的表或不同的表。
这样的stored procedure有20多个,用linux cron job,每晚跑一次。
如果PL SQL stored procedure 用TEMP table, 转变从TSQL到PLSQL就很容易。不用的
话,大的stored procedure还是挺complex的。 |
B*****g 发帖数: 34098 | 5 你们公司要parttime remote consultant吗?本人价格厚道,人超所值,哈哈。
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTIO
【在 h*****6 的大作中提到】 : 现在组的manager说的。 : 俺的工作涉及把TSQL stored procedure code转成PL SQL, 有的 TSQL stored : procedure 有两三千行代码,好几个TEMP tables, 如果PL SQL 不用TEMP table,就只 : 能用 Associative Array or nested table, 处理数据,最后写到表里,中间过程不用 : TEMP table,都在memory内。 : Stroed procedure 的功能就是把几个millions records 级别的表join在一起,做一些 : 很简单判别,加减,再写进原来的表或不同的表。 : 这样的stored procedure有20多个,用linux cron job,每晚跑一次。 : 如果PL SQL stored procedure 用TEMP table, 转变从TSQL到PLSQL就很容易。不用的 : 话,大的stored procedure还是挺complex的。
|
y****w 发帖数: 3747 | 6 1. manager不是技术标准。要有你自己的判断。当然如果你的方法没有明显优势,听人家的。
2. tsql有很多temp table,最好你分析分析是不是有必要换成collection。基本面上我是持怀疑态度的,小的转换无所谓,大临时表你要用collection性能要吃紧。
3. 在转换时间,运行效率间权衡,直接转很可能是最合理的。beijing转的那个连接让我很吃惊,大概就是把临时表换成自查询了?那sql server原先自己也能这么干啊。做成临时表示不是有原因?很可能就是性能,加个索引嘛。
【在 h*****6 的大作中提到】 : 现在组的manager说的。 : 俺的工作涉及把TSQL stored procedure code转成PL SQL, 有的 TSQL stored : procedure 有两三千行代码,好几个TEMP tables, 如果PL SQL 不用TEMP table,就只 : 能用 Associative Array or nested table, 处理数据,最后写到表里,中间过程不用 : TEMP table,都在memory内。 : Stroed procedure 的功能就是把几个millions records 级别的表join在一起,做一些 : 很简单判别,加减,再写进原来的表或不同的表。 : 这样的stored procedure有20多个,用linux cron job,每晚跑一次。 : 如果PL SQL stored procedure 用TEMP table, 转变从TSQL到PLSQL就很容易。不用的 : 话,大的stored procedure还是挺complex的。
|
B*****g 发帖数: 34098 | 7 个人觉得大量的数据根本就不应该放到tt、collection里去。
人家的。
我是持怀疑态度的,小的转换无所谓,大临时表你要用collection性能要吃紧。
让我很吃惊,大概就是把临时表换成自查询了?那sql server原先自己也能这么干啊。
做成临时表示不是有原因?很可能就是性能,加个索引嘛。
【在 y****w 的大作中提到】 : 1. manager不是技术标准。要有你自己的判断。当然如果你的方法没有明显优势,听人家的。 : 2. tsql有很多temp table,最好你分析分析是不是有必要换成collection。基本面上我是持怀疑态度的,小的转换无所谓,大临时表你要用collection性能要吃紧。 : 3. 在转换时间,运行效率间权衡,直接转很可能是最合理的。beijing转的那个连接让我很吃惊,大概就是把临时表换成自查询了?那sql server原先自己也能这么干啊。做成临时表示不是有原因?很可能就是性能,加个索引嘛。
|
y****w 发帖数: 3747 | 8 有些大库在做某些查询的时候,把中间结果放到tt加个index,比直接一个sql写出来好很多。抓到老鼠就是展招。
btw,对于collection,个人觉得就是给程序员手头的方便,别指望真能处理大数据。
【在 B*****g 的大作中提到】 : 个人觉得大量的数据根本就不应该放到tt、collection里去。 : : 人家的。 : 我是持怀疑态度的,小的转换无所谓,大临时表你要用collection性能要吃紧。 : 让我很吃惊,大概就是把临时表换成自查询了?那sql server原先自己也能这么干啊。 : 做成临时表示不是有原因?很可能就是性能,加个索引嘛。
|
B*****g 发帖数: 34098 | 9 大量查询最好分成小块来做,想想往一个temp table里存百万个数据(假设有100个
session在run?)。。。。
collection处理大数据的效果很好,具体请见CINAOUG系列文章,hoho
好很多。抓到老鼠就是展招。
【在 y****w 的大作中提到】 : 有些大库在做某些查询的时候,把中间结果放到tt加个index,比直接一个sql写出来好很多。抓到老鼠就是展招。 : btw,对于collection,个人觉得就是给程序员手头的方便,别指望真能处理大数据。
|
y****w 发帖数: 3747 | 10 对我这儿来说,放几百万小意思. 要分成10w的小块,经常要慢个n>10倍的。
说真的,你去做下试验看看多大批次总体效果最好。我有时候就不明白大家为什么对现
代数据库的大数据处理能力不放心
【在 B*****g 的大作中提到】 : 大量查询最好分成小块来做,想想往一个temp table里存百万个数据(假设有100个 : session在run?)。。。。 : collection处理大数据的效果很好,具体请见CINAOUG系列文章,hoho : : 好很多。抓到老鼠就是展招。
|
|
|
B*****g 发帖数: 34098 | 11 放心,所以就是inline table,hoho,DBA不让。基于网上post和个人测试,oracle处
理数据,一般bulk每次1万-10万最快。
另外,你的EXP是DB2,oracle不一定同理工作,而且还是case by case。你举个例子为
啥要用temp table吧。俺也有例子,哈哈。
【在 y****w 的大作中提到】 : 对我这儿来说,放几百万小意思. 要分成10w的小块,经常要慢个n>10倍的。 : 说真的,你去做下试验看看多大批次总体效果最好。我有时候就不明白大家为什么对现 : 代数据库的大数据处理能力不放心
|
y****w 发帖数: 3747 | 12 这也太累了。还是老原则,具体情况具体分析,没有必然差劲的技术,也没有银子子弹。
btw,上面我说催着改了的是sql server。
【在 B*****g 的大作中提到】 : 放心,所以就是inline table,hoho,DBA不让。基于网上post和个人测试,oracle处 : 理数据,一般bulk每次1万-10万最快。 : 另外,你的EXP是DB2,oracle不一定同理工作,而且还是case by case。你举个例子为 : 啥要用temp table吧。俺也有例子,哈哈。
|
B*****g 发帖数: 34098 | 13 就SQL Server转Orcle来说,把SP里的tt转成collection或者其他基本上是正确的。就是
用tt,也不要在SP做create/drop。
弹。
oracle处
子为
【在 y****w 的大作中提到】 : 这也太累了。还是老原则,具体情况具体分析,没有必然差劲的技术,也没有银子子弹。 : btw,上面我说催着改了的是sql server。
|
g***l 发帖数: 18555 | 14 我不是ORACLE的,但是这样,CREATE TEMP TABLE就要产生IO,现在SERVER的主要问题
是HIGH IO WAIT,DISK的读写速度现在是BOTTLE NECK,内存啥的越来越大,现在都是
尽量用内存或者CACHE,避免读写DISK |
h*****6 发帖数: 866 | 15 你指的的Oracle用tt是指global temporary table吗?就是那种手动创建,一直存在数
据库里
面,不是sp自动创建,tt表名字整个DB unique, 在sp里面插入删除数据时把这样的tt
作为临时的地
方,sp最后把tt表内容清空。好像和一个空的permanent表没有啥区别了。
能简单介绍一下Oracle sp里面create/drop table的危害吗?我想我manager说的就是
不要在SP
做create/drop,俺不懂为啥?谢谢。
就是
【在 B*****g 的大作中提到】 : 就SQL Server转Orcle来说,把SP里的tt转成collection或者其他基本上是正确的。就是 : 用tt,也不要在SP做create/drop。 : : 弹。 : oracle处 : 子为
|
B*****g 发帖数: 34098 | 16 tt和普通table有区别,tt是per session的。不同的session可以同时run多个SP(用同
一个tt),各个session之间互不影响,session结束后自动清除。普通table不行。
In oracle, create/drop tt是DDL,不易在SP中作(DBA正常的DDL除外)。而且一般
DBA也不会让你在SP里用DDL,如果DBA让你这样做了,换DBA吧。一般来说SP里也基本上
用不到tt。具体看我贴的唐木开特的link
tt
【在 h*****6 的大作中提到】 : 你指的的Oracle用tt是指global temporary table吗?就是那种手动创建,一直存在数 : 据库里 : 面,不是sp自动创建,tt表名字整个DB unique, 在sp里面插入删除数据时把这样的tt : 作为临时的地 : 方,sp最后把tt表内容清空。好像和一个空的permanent表没有啥区别了。 : 能简单介绍一下Oracle sp里面create/drop table的危害吗?我想我manager说的就是 : 不要在SP : 做create/drop,俺不懂为啥?谢谢。 : : 就是
|