天天看點

Vertica的這些事<十四>—— vertica優化

delete_vectors

資料模型:

1、  規範化你的表

2、  使用核實的壓縮格式

表設計:

1、  使用分區

2、  定義主鍵外鍵

3、  預設的數字類型長度可能比實際需要的大。例如:numberc 該類型預設的長度是38位,如果實際的長度比這個小,那你建表的時候最好加上适合的長度。

4、  對于一個true/false值,boolean類型比char(1)類型和integer類型更快。

projections

1、  segmentation vs. replication (unsegmented)簡單的說,如果資料量大的話使用segmentation,小的話使用unsegmented

2、  使用order by ,理想的order by 的字段應該全部在where查詢字句中出現(詳見另一篇文章【】)

3、  列長度的規範,不要一味的定義大長度,在過濾條件和join時的字段如果是字元類型,最好使用int類型。

4、  group by:使用group by 時,一定要explain檢視執行計劃,如果執行計劃中使用的【group by hash】這時候就要修改你的查詢sql或者projection的,group by最好使用【group by pipeline】這種方式使用更少的記憶體,查詢更快!

5、  清楚不必要的projection,多餘的projection意味着查詢是要花費更多的時間去選擇。

6、  projection中的order 字段首先選用過濾的字段,然後選用join使用的列。

7、  確定projection資料均勻分布在各個節點上,以免查詢時産生資料傾斜。

查詢:

1、  避免使用in

2、  避免使用union

3、  select 時避免使用*,查詢時選擇合适的列

4、  使用with子句

5、  避免使用别名,例如 groupby 1,2,3

6、  在子查詢中使用orderby

7、  避免使用不等關系,例如:>=,not in 等

8、  對于複雜的sql,可以多使用臨時表

9、  delete_vectors中的資料盡量清除

資源(resources)

1、  profile,檢視查詢所需要的記憶體

2、  建立專用的資源池