1

我需要加快插入 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:保存insert的执行计划,可以让后续的执行速度更快。

我一生都无法使用“REPEATED”成功执行查询,而且我无法在网上找到任何使用直接 SQL 的示例。有没有人对如何让它在语法上工作有任何建议?

4

2 回答 2

1

我不确定 Vectorwise 是否支持它,Ingres 支持,但你可能想看看 using CACHE_DYNAMIC. 有关更多信息,请参阅http://docs.actian.com/ingres/10s/upgrade-guide/2038-cached-dynamic-cursor-query-plans

于 2012-08-09T07:51:34.473 回答
1

@w00te:忽略重复。如果多插入性能是必不可少的,我宁愿做一些更“激进”的事情。- 我会创建一个临时 HEAP 表(它们是插入时最快的存储类型),一旦我完成插入一堆(可以是数百万)行,然后我只需将表修改为VECTORWISE或从中选择一张vectorwise桌子。如果您只是选择,那么该表可能不必是临时的,它可以是您临时存储数据的普通表。取决于用例。

在插入上述 HEAP 表时,尽可能使用批处理(Ingres JDBC >= 4.0.1),它可以显着提高插入数百万行的速度(我知道这是事实——我做了很少的测试)。

编辑:显然,这不适用于 VectorWise。最好的方法是直接插入 VectorWise 表,最好是非索引的。使用 JDBC 准备好的语句,并批量执行,你会没事的。格兰特关于使用 CACHE_DYNAMIC 的提议也应该被考虑。

于 2012-08-13T07:51:02.520 回答