我对vertica很新。我已经写了一个简单的Insert into语句,但是花了好几个小时来执行100万条记录。
像:
insert into abc(a,b,c)
select x,y,z from xyz
where x > 20;
无论如何都要提高性能? 目标表有适当的排序。
提前致谢!!
答案 0 :(得分:1)
根据有限的信息,我将给你两个方面来研究(1和2是相同的区域,根据你正在做的事情,只是不同的选择)。
如果您使用的是JDBC或ODBC,请务必使用 batch sql 。只要您使用Vertica的JDBC或ODBC驱动程序,它就会将批处理SQL转换为幕后更高效的COPY语句。数百万的陈述并不是Vertica擅长的东西,但它的批量非常好。
如果您不使用JDBC或ODBC(vsql,vertica_python模块或其他),则需要流式传输到COPY FROM STDIN
或COPY LOCAL
语句。执行此操作的方法取决于您实际使用的连接方法。
如果您正在使用序列,则将缓存设置为高是非常重要的。每个未缓存的序列pull都是目录锁。这肯定会极大地减慢插件的速度。如果您使用了标识列或自动编号,则可以在sequences
视图中查找幕后关联的序列。做ALTER SEQUENCE
sequence_name CACHE 100000;
之类的事情。
预计序列中存在差距。无论你是否使用缓存,这都可能发生,但你几乎可以保证使用缓存。
我还要再添加一个:
答案 1 :(得分:-1)