我需要加速插入Ingress VectorWise数据库,文档显示:
http://docs.actian.com/ingres-vectorwise/2.5/sql-language-guide/5315-insert
The INSERT statement inserts rows into a table.
This statement has the following format:
[REPEATED]]INSERT INTO [schema.]table_name
[(column {, column})]
[OVERRIDING SYSTEM VALUE | OVERRIDING USER VALUE]
[VALUES (expr{, expr}) {,(expr{ ,expr})} |
[WITH common_table_expression] subselect];
并说:
REPEATED:保存插件的执行计划,可以制作 随后的执行速度更快。
我不能为我的生活得到一个使用“REPEATED”执行成功的查询,我找不到任何在线使用直接SQL的例子。有没有人对如何让它在语法上工作有任何建议?
答案 0 :(得分:1)
我不确定Vectorwise是否支持它,Ingres确实如此,但你可能想看看使用CACHE_DYNAMIC
。有关详细信息,请参阅http://docs.actian.com/ingres/10s/upgrade-guide/2038-cached-dynamic-cursor-query-plans。
答案 1 :(得分:1)
@ w00te:忽略重复。如果多插入性能至关重要,我宁愿做一些更“激进”的事情。 - 我会创建一个临时的HEAP表(它们是插入时最快的存储类型),一旦我完成了插入束(可能是数百万)的行,那么我只需要将表修改为VECTORWISE或者从中选择一个vectorwise
表。如果您只是选择,那么表可能不必是临时的,它可以是您临时存储数据的普通表。取决于用例。
在插入上述HEAP表时,尽可能使用batch processing(Ingres JDBC> = 4.0.1),它可以显着提高插入数百万行的速度(我知道这是事实 - 我做了很少的测试)。
编辑:显然,这不适用于VectorWise。最好的方法是直接插入VectorWise表,最好是非索引表。使用JDBC预处理语句和批处理执行,你会没事的。还应考虑Grant的使用CACHE_DYNAMIC的建议。