2012-10-19 17 views
7

Moja tabela chmura sql Google posiada obecnie 1126571 wiersze i dodawanie minimum 30 tysięcy każdy day.When wykonać zapytanie:Google Cloud SQL: Nie można wykonać instrukcji

select count(distinct sno) as tot from visits 

sql niezwłocznego wygeneruje następujący błąd:

Error 0: Unable to execute statement 

. Czy Cloud SQL Query jest w stanie przekroczyć wyjątek o 60 sekund. Jak pokonać problem, gdy stół stanie się duży.

Odpowiedz

0

dodać INDEX do swojej kolumny sno i poprawi to jej wydajność.

ALTER TABLE visits ADD INDEX (sno) 
+0

w mojej tabeli co sekundę trwa wstawianie. Więc indeksowanie spowoduje zmniejszenie wydajności kwerendy wstawiania. –

+0

@JinjuJoseph Możesz dodać wyzwalacz do odwiedzin, aby zaktualizować żądaną wartość w innej tabeli, powiedz sumy w polu tot. Następnie wybierz wartość zbiorczą bezpośrednio z tego miejsca. –

1

Podziel stół na dwie tabele. Jeden, aby otrzymywać nowe wizyty ... transakcje ... jeden do raportowania. Indeksuj tabelę raportowania. Przesyłaj i usuwaj dane regularnie.

Tabela transakcji pozostanie względnie mała i dlatego będzie szybko zliczyć. Tabela raportów będzie szybko zliczyć ze względu na indeks.

0

Spróbuj podzielić zapytanie wybrane dla wielu części, na przykład pierwsze zapytanie wyboru musi być ograniczone do 50000, a następnie drugie zapytanie wyboru musi zostać uruchomione z 50000 i ograniczone do 50000 i tak dalej.

Można to zrobić przez ten scenariusz:

1- Get liczyć rekordy.

2- Wykonaj pętlę i zakończ ją przy liczbie rekordów.

3- Dla każdej pętli, sprawiają, że kwerenda wybierająca wybrać 50000 rekordów i dołączyć wyniki do DataTable (w zależności od tego, co znajduje się w język programowania)

4- W kolejnej pętli, należy uruchomić wybierając skąd poprzedni Po zakończeniu pętli drugie zapytanie musi wybrać następne 50000 rekordów i tak dalej.

Możesz określić wybierz indeks początkowy, tym stwierdzeniem zapytań SQL:

SELECT * FROM mytable somefield LIMIT 50000 OFFSET 0; 

Wtedy dostaniesz cały dane, które chcesz.

UWAGA: wykonaj test, aby zobaczyć, jaka maksymalna liczba rekordów może zostać załadowana w ciągu 60 sekund, co zmniejszy liczbę pętli, a tym samym zwiększy wydajność.

Powiązane problemy