2012-10-19 86 views
7

我的谷歌雲SQL表具有目前並添加最小1126571行30000每day.When執行查詢:谷歌雲SQL:無法執行語句

select count(distinct sno) as tot from visits 

SQL提示符就會產生以下錯誤:

Error 0: Unable to execute statement 

。 Cloud SQL Query是否有60秒超出異常。桌子變大時如何克服這個問題。

回答

0

在您的列sno中添加一個INDEX,它會提高其性能。

ALTER TABLE visits ADD INDEX (sno) 
+0

在我的表中每秒插入正在進行。所以編制索引會降低插入查詢的性能 –

+0

@JinjuJoseph你可以在訪問時添加一個觸發器,以便在另一個表中更新你想要的值,比如總計字段tot。然後你會直接從那裏選擇聚合值。 –

1

將表格分成兩個表格。一個接收新的訪問...交易...一個用於報告。索引報告表。定期傳輸和清除數據。

交易表將保持相對較小,因此計數會很快。由於該索引,報告表將很快計入。

0

嘗試爲多個部分拆分您的選擇查詢,例如,第一個選擇查詢必須限制爲50000,然後第二個選擇查詢必須從50000開始並限制爲50000等等。

你可以通過這樣的場景:

1-獲取記錄計數。

2-建立一個循環,並以記錄數結束。

3-對於每一個循環,使選擇查詢選擇50000分的記錄,並將結果追加到一個DataTable(取決於什麼是你的編程語言)

4-下一個循環,你必須開始從那裏以前的選擇循環結束,例如,第二個查詢必須選擇下一個50000記錄等等。

您可以通過該SQL查詢語句中指定您的選擇起始索引:

SELECT * FROM mytable somefield LIMIT 50000 OFFSET 0; 

然後你會得到你想要的全部數據。

注意:進行測試以查看60秒內可以加載的最大記錄數是多少,這將減少您的循環並因此提高性能。