2014-11-06 90 views
0

在例如我的蜂巢查詢編輯器我有,有很多重複的語句查詢:是否SQL語句緩存結果

select 
    100 * (count(book_id) - count(case when column1 is null or TRIM(column1) !='' or column1="N/A" or column1="NA" then book_id else null end)/count(book_id)) as missing_cnt_column1, 
    100 * (count(book_id) - count(case when column2 is null or TRIM(column2) !='' or column2="N/A" or column2="NA" then book_id else null end)/count(book_id)) as missing_cnt_column2 
    from table book_info 

這個腳本每計算每列的有效值的百分比。關於這個問題有幾個問題:
1)每次都會緩存或計算語句計數(book_id)嗎?這對我來說非常重要,因爲列數大於200
2)我可以以某種方式提高此查詢的性能嗎?

在此先感謝!

回答

1

聲明沒有問題。 SQL引擎不會緩存count(bookid)。但是,到目前爲止,大量的工作是在聚合中,而不是在計算事情。查詢只會遍歷數據一次,但可能會保留一個單獨的值,每個值都會遞增,每個值爲count()。這對性能基本上沒有影響,因爲讀取數據通常會更重要。

可以使用avg()代替count()和簡化計算:

select avg(case when column1 is null or trim(column1) <> '' or column1 = 'N/A' or column1 = 'NA' 
       then 0.0 
       else 100.0 
      end) as missing_cnt_column1, 
     avg(case when column2 is null or trim(column2) <> '' or column2 = 'N/A' or column2 = 'NA' 
       then 0.0 
       else 100.0 
      end) as missing_cnt_column2 
from table book_info;