我的谷歌云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秒超出异常。桌子变大时如何克服这个问题。
我的谷歌云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秒超出异常。桌子变大时如何克服这个问题。
在您的列sno
中添加一个INDEX
,它会提高其性能。
ALTER TABLE visits ADD INDEX (sno)
将表格分成两个表格。一个接收新的访问...交易...一个用于报告。索引报告表。定期传输和清除数据。
交易表将保持相对较小,因此计数会很快。由于该索引,报告表将很快计入。
尝试为多个部分拆分您的选择查询,例如,第一个选择查询必须限制为50000,然后第二个选择查询必须从50000开始并限制为50000等等。
你可以通过这样的场景:
1-获取记录计数。
2-建立一个循环,并以记录数结束。
3-对于每一个循环,使选择查询选择50000分的记录,并将结果追加到一个DataTable(取决于什么是你的编程语言)
4-下一个循环,你必须开始从那里以前的选择循环结束,例如,第二个查询必须选择下一个50000记录等等。
您可以通过该SQL查询语句中指定您的选择起始索引:
SELECT * FROM mytable somefield LIMIT 50000 OFFSET 0;
然后你会得到你想要的全部数据。
注意:进行测试以查看60秒内可以加载的最大记录数是多少,这将减少您的循环并因此提高性能。
在我的表中每秒插入正在进行。所以编制索引会降低插入查询的性能 –
@JinjuJoseph你可以在访问时添加一个触发器,以便在另一个表中更新你想要的值,比如总计字段tot。然后你会直接从那里选择聚合值。 –