Infobright資料庫查詢最佳化

來源:互聯網
上載者:User

前面已經分析了Infobright的構架,簡要介紹了Infobright的壓縮過程和工作原理。現在來討論查詢最佳化的問題。

1)配置環境

在Linux下面,Infobright環境的配置可以根據README裡的要求,配置brighthouse.ini檔案。

2) 選取高效的資料類型

參見《細數Infobright的相關資料類型》。

3)使用comment lookup

comment lookup只能顯式地使用在char或者varchar上面。Comment Lookup可以減少儲存空間,提高壓縮率,對char和varchar欄位採用comment lookup可以提高查詢效率。

Comment Lookup實現機制很像位元影像索引,實現上利用簡短的數實值型別替代char欄位已取得更好的查詢效能和壓縮比率。CommentLookup的使用除了對資料類型有要求,對資料也有一定的要求。一般要求資料類別的總數小於10000並且當前列的單元數量/類別數量大於10。Comment Lookup比較適合年齡,性別,省份這一類型的欄位。

comment lookup使用很簡單,在建立資料庫表的時候如下定義即可:

act   char(15)   comment 'lookup',

part  char(4) comment 'lookup',

4)盡量有序地匯入資料

前面分析過Infobright的構架,每一列分成n個DP,每個DPN列面儲存著DP的一些統計資訊。有序地匯入資料能夠使不同的DP的DPN內的資料差異化更明顯。比如按時間date順序匯入資料,那麼前一個DP的maxdate)<=下一個DP的min(date),查詢的時候就能夠減少可疑DP,提高查詢效能。換句話說,有序地匯入資料就是使DP內部資料更加集中,而不再那麼分散。

5)使用高效的查詢語句。

這裡涉及的內容比較多了,總結如下:

盡量不適用or,可以採用in或者union取而代之

減少IO操作,原因是infobright裡面資料是壓縮的,解壓縮的過程要消耗很多的時間。

查詢的時候盡量條件選擇差異化更明顯的語句

Select中盡量使用where中出現的欄位。原因是Infobright按照列處理的,每一列都是單獨處理的。所以避免使用where中未出現的欄位可以得到較好的效能。

限制在結果中的表的數量,也就是限制select中出現表的數量。

盡量使用獨立的子查詢和join操作代替非獨立的子查詢

盡量不在where裡面使用MySQL函數和類型轉換符

盡量避免會使用MySQL最佳化器的查詢操作

使用跨越Infobright表和MySQL表的查詢操作

盡量不在group by 裡或者子查詢裡面使用數學操作,如suma*b)。

select裡面盡量剔除不要的欄位。

Infobright執行查詢語句的時候,大部分的時間都是花在最佳化階段。Infobright最佳化器雖然已經很強大,但是編寫查詢語句的時候很多的細節問題還是需要程式員注意。 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.