2012-10-19 29 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秒内可以加载的最大记录数是多少,这将减少您的循环并因此提高性能。