我需要加快插入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"获得查询以成功执行,并且我无法在线找到任何使用直接SQL的示例。 有没有人对如何让它在语法上工作有任何建议?
@w00te : 忽略重复。如果多插入性能至关重要,我宁愿做一些更"激进"的事情。- 我会创建一个临时堆表(在插入时它们是最快的存储类型),一旦我完成了插入一堆(可以是数百万行)的行,那么我只需将表修改为 VECTORWISE 或从中选择到vectorwise
表中。如果您只是选择,那么该表可能不必是临时的,它可以是临时存储数据的普通表。取决于用例。
在插入上述堆表时,如果可能,请使用批处理(Ingres JDBC>= 4.0.1),它可以显着提高插入数百万行的速度(我知道这是事实 - 我做了很少的测试)。
编辑:显然,这不适用于VectorWise。最好的方法是直接插入到 VectorWise 表中,最好是非索引的。使用 JDBC 预准备语句和批处理执行,你会没事的。格兰特使用CACHE_DYNAMIC的建议也应该被考虑。
我不确定 Vectorwise 是否支持它,Ingres 支持,但你可能想看看使用 CACHE_DYNAMIC
.有关详细信息,请参阅 http://docs.actian.com/ingres/10s/upgrade-guide/2038-cached-dynamic-cursor-query-plans。