由於數據量過大,我們將根據用戶id 將數據存儲在不同的表中,根據用戶id模10的余數作為表的后綴。
有如下十張表:test_0, test_1, ... ,test_9
現在需要根據某個條件查詢統計數據
我們可以使用到union all
注:union all 與 union的區別
效率上,union all比union更好一點.因為union在執行的時候會把結果集進行排序並刪除重復的記錄,而union all則會把兩個結果集原封不動地合並在一起
摘自:http://brilon.iteye.com/blog/432313
SELECT COUNT(id) FROM test_0 WHERE field1 = 1
UNION ALL
SELECT COUNT(id) FROM test_1 WHERE field1 = 1
.
.
.
UNION ALL
SELECT COUNT(id) FROM test9 WHERE field1 = 1
現在需要把它們匯總加起來,可以使用如下方法實現
SELECT COUNT(cnt) FROM (
SELECT COUNT(id) AS cnt FROM test_0 WHERE field1 = 1
UNION ALL
SELECT COUNT(id) AS cnt FROM test_1 WHERE field1 = 1
.
.
.
UNION ALL
SELECT COUNT(id) AS cnt FROM test9 WHERE field1 = 1
) AS countdata
注:為UNION ALL的所有表做一個別名是必須的,雖然這個別名並沒有什么意義
但如果沒有的話mysql會報出錯誤:Every derived table must have its own alias