我對vertica很新。我已經寫了一個簡單的插入聲明,但它需要數小時才能執行100萬條記錄。插入Vertica性能調優
喜歡:
insert into abc(a,b,c)
select x,y,z from xyz
where x > 20;
反正是有提高性能? 目標表有適當的排序。
在此先感謝!
我對vertica很新。我已經寫了一個簡單的插入聲明,但它需要數小時才能執行100萬條記錄。插入Vertica性能調優
喜歡:
insert into abc(a,b,c)
select x,y,z from xyz
where x > 20;
反正是有提高性能? 目標表有適當的排序。
在此先感謝!
使用覆蓋索引,它提高了性能
這似乎與被問到的問題無關。你可能誤解了這個問題是'INSERT'而不是'SELECT'的表現。 –
基於有限的信息,我給你兩個領域尋找到(1和2是相同的區域,這取決於只是不同的選擇關於你在做什麼)。
如果使用JDBC或ODBC,一定要使用一批SQL。只要您使用Vertica的JDBC或ODBC驅動程序,它就會將批處理SQL轉換爲幕後更高效的COPY語句。數百萬的聲明並不是Vertica擅長的,但它的體積非常好。
如果您不使用JDBC或ODBC(vsql,vertica_python模塊或其他),那麼您將需要流式傳輸到COPY FROM STDIN
或COPY LOCAL
語句。這樣做的方法取決於你實際使用什麼方法來連接。
如果您使用的是序列,緩存設置爲高位非常重要。每個未緩存的序列拉是一個目錄鎖。這肯定會大大減慢你的插入速度。如果您使用了標識列或auto_number,則可以查看sequences
視圖中的幕後相關序列。做一些像ALTER SEQUENCE
sequence_name CACHE 100000;
。
預計序列中存在空位。無論您是否使用緩存,這都可能發生,但您幾乎可以保證獲得緩存。
我會增加一個:
Oracle不是Vertica,所以我刪除了標籤。 –
您可以通過在'xyz'表上使用投影來加速操作。 –