我正在處理一個相當大的數據庫,其中每一行都有一個特定的類。每個類都屬於一個泛化類,它在單獨的表中指定。所以,爲了找到一個項目的泛化類,必須執行一個JOIN。按分組SQL查詢範圍有效計算結果數
此外,其中一列包含某個數值,例如'w'。我試圖找到一個有效的查詢,它給出了'w'的特定範圍內的項目數量,並按廣義類別進行分組。因此,例如,結果行的人會給出與該類別的項目數的擊穿W¯¯< 500,500<瓦特< 1500和W> 1500
現在,我用一個預先存在查看已將廣義類加入結果集中,以便在最終查詢中不需要JOIN。最後的查詢使用我發現的一個技巧here來計算特定範圍內的項目數量。
SELECT generalized_class,
SUM(IF(w BETWEEN 1 AND 500, 1, 0)) AS low,
SUM(IF(w BETWEEN 500 AND 1500, 1, 0)) AS middle,
SUM(IF(w > 1500, 1, 0)) AS high
FROM table_vw
GROUP BY generalized_class
但是,我不太確定這是否是最有效的方法。由於數據庫相當大,整個過程需要五分鐘才能完成。我想,計算這種東西一般來說是一個昂貴的操作,但我只是想知道我是否可以使用不同的方法來消除一些負載。任何人?
CNC中 視圖的定義是什麼壯觀,它像
CREATE VIEW table_vw AS SELECT d.id, d.class, c.generalized_class, <more fields>,
(w_high/w_low)/2 AS w
FROM base_table d
LEFT OUTER JOIN secondary_table c
ON (d.class = c.class)
我敢肯定有一個更左外連接被另一個表進行,但沒有從該表中的行(正如我所說的,這是一個預先存在的視圖,所以有很多東西不是爲這個查詢量身定做的)。連接行'class'僅在輔助表中編入索引。
什麼是您當前使用的查看查詢?你加入的表格的結構和索引是什麼,目前的解釋計劃是什麼意思? – Ben
請發佈viwe及其基礎表的定義。 – Quassnoi