【发布时间】:2013-08-07 04:00:30
【问题描述】:
我有一个在 WAN 上运行缓慢的应用程序 - 我们认为原因是多次插入到表中。我目前正在寻找更有效的方法来同时插入多行。
我找到了这个方法:
INSERT ALL
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (100,20)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (21,2)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (321,10)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (22,13)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (14,121)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (11,112)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (112,23)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (132,2323)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (121,34)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (24333,333)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (1232,3434)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (4554,3434)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (3434,211)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (3434,1233)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (12,22)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (356,233)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (9347,23)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (8904,245)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (342,4545)
INTO MULTI_INSERT(VAL_1, VAL_2) VALUES (453,233)
SELECT 1 FROM DUAL;
我想知道的是:上述方法实际上是否比仅执行 20 "INSERT INTO MY_TABLE (1,1);" 更有效?还有其他方法吗?
【问题讨论】:
-
桌子上有触发器吗?
-
嗨,Harshit - 不,桌子上没有触发器
-
大概你的现实生活用例超过 20 行?而不是硬编码的值?
-
@APC,是的,没错,该表是一个审计跟踪,一次插入大约 100 行,全部由当时的应用程序生成,因此没有硬编码值。跨度>
-
您是否调查过为什么现有的插入很慢? 100 行并不多,您应该能够在几乎任何时间内运行 100 条插入语句。这表明您还有其他问题:I/O 或 CPU 争用,或者某些描述的锁定?您应该花一些时间诊断当前代码的行为,而不是猜测可能是错误问题的解决方案。
标签: sql oracle networking oracle11g sql-tuning