經常使用的兩種數據分區方法(以Teradata爲例)

海量數據性能優化的一個基本的原則就是「分區」(也有叫「分片」的)。分區思想其實就是平常工做生活中的抽屜原理:咱們把本身的物品按照某種邏輯歸置到多個小抽屜中,通常會比混在一個大抽屜中好找;可是小抽屜太多了、或者邏輯混亂了,也可能效果拔苗助長。sql

Teradata的分區語法較爲簡潔,其中經常使用的是按時間分區,以下例只要添加到create table語句末尾就能夠實現2013年整年一天一個分區了(爲了省事,能夠一次分5-10年)數據庫

  
  
  
  
  1. PARTITION BY RANGE_N(  性能優化

  2.     Rcd_Dt BETWEEN DATE '2013-01-01' AND DATE '2013-12-31'ide

  3.     EACH INTERVAL '1' DAY, NO RANGE性能

  4. ); 優化

另一個經常使用(可是不容易掌握)的是按字符串取值分區。在上述按時間分區中咱們能夠看到RANGE_N關鍵字。按值分區採用CASE_N關鍵字,以下例所示:spa

  
  
  
  
  1. PARTITION BY CASE_N(   開發

  2.  (CASE WHEN (my_field='A'THEN (1) ELSE (0) END)=1,    字符串

  3.  (CASE WHEN (my_field='B'THEN (2) ELSE (0) END)=2,    string

  4.  (CASE WHEN (my_field='C'THEN (3) ELSE (0) END)=3,    

  5. NO CASE OR UNKNOWN);

更進一步,其中以下面的語法元素:

  
  
  
  
  1. my_field='A'

能夠修改成相似於這樣的形式:

  
  
  
  
  1. SUBSTR(my_field,1,1) IN ('E','F','G'

在現實中,由於訪問數據從全表掃描變成了分區掃描的緣由,某些步驟能夠達成10-100倍的性能提高。對於複雜的耗時較長的大做業,也老是可以縮短一半以上的運行時間。很是有意思的現象是,即便是經驗豐富的開發人員,對數據分區的掌握也不必定很好。數據分區理念是超越具體數據庫的,不管是Teradata仍是別的什麼數據庫,在我過去將近十年的職業生涯中,大多數性能問題均可以經過數據分區得以妥善解決。

相關文章
相關標籤/搜索