重复插入语法以提高矢量效率 - 任何例子?

时间:2012-08-08 20:54:31

标签: sql ingres vectorwise

我需要加速插入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的例子。有没有人对如何让它在语法上工作有任何建议?

2 个答案:

答案 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的建议。