🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych
7 messages
7 total messages Started by Borneq Fri, 20 May 2016 19:17
wolne select count(*)
#194959
Author: Borneq
Date: Fri, 20 May 2016 19:17
4 lines
1047 bytes
Zapuściłem select count(*) na mySQL, aby zobaczyć jak długo potrwa 
pobranie danych, ale samo select count(*) wciąż się wykonuje.
Dlaczego to tak długo trwa? rozumiem że np. distinct by trwało długo, 
ale podanie ilości rekordów?
Re: wolne select count(*)
#194960
Author: Ronald Kuczek
Date: Fri, 20 May 2016 19:31
10 lines
1395 bytes
W dniu 20.05.2016 o 21:17, Borneq pisze:
> Zapuściłem select count(*) na mySQL, aby zobaczyć jak długo potrwa
> pobranie danych, ale samo select count(*) wciąż się wykonuje.
> Dlaczego to tak długo trwa? rozumiem że np. distinct by trwało długo,
> ale podanie ilości rekordów?
Pokaż show processlist. Byś może Twoje zapytanie czeka na wykonanie 
innego zapytania zmieniającego tabelę, którą właśnie odpytujesz.

Pozdrawiam
Rony
Re: wolne select count(*)
#194961
Author: Borneq
Date: Fri, 20 May 2016 20:37
10 lines
1479 bytes
W dniu 20.05.2016 o 21:31, Ronald Kuczek pisze:
> W dniu 20.05.2016 o 21:17, Borneq pisze:
>> Zapuściłem select count(*) na mySQL, aby zobaczyć jak długo potrwa
>> pobranie danych, ale samo select count(*) wciąż się wykonuje.
>> Dlaczego to tak długo trwa? rozumiem że np. distinct by trwało długo,
>> ale podanie ilości rekordów?
> Pokaż show processlist. Byś może Twoje zapytanie czeka na wykonanie
> innego zapytania zmieniającego tabelę, którą właśnie odpytujesz.

Jest na zdalnym serwerze, być może ktoś coś zapisuje do bazy
Re: wolne select count(*)
#194962
Author: Robert Winkler
Date: Sat, 21 May 2016 07:39
31 lines
2296 bytes
W dniu 20.05.2016 o 21:17, Borneq pisze:
> Zapuściłem select count(*) na mySQL, aby zobaczyć jak długo potrwa
> pobranie danych, ale samo select count(*) wciąż się wykonuje.
> Dlaczego to tak długo trwa? rozumiem że np. distinct by trwało długo,
> ale podanie ilości rekordów?

Witaj w klubie
Mam dokładnie to samo u siebie :(
Przy czym serwer stoi u mnie w firmie a nie na jakimś hostingu
i wiem że nikt inny w tym czasie niczego nie robi z moją tabelą.

Mam tabele, niedużą, jakieś 28 milionów rekordów,
780 MB z danymi plus jakieś 300MB na indeksy,
engine InnoDB bo muszę mieć transakcje gdy zmieniam te dane.
Wołam zapytanie:
select count(*) from `moja_tabela` where `created_at` > '2014-05-01'
i czekam kilka minut na odpowiedź serwera.
Nie ważne, że na tabeli mam indeks zawierający tylko kolumnę created_at
dla mysql'a nie ma to żadnego znaczenia
i w niczym to nie przyspiesza jego działania.

Praca z mysql'em jest czasem naprawdę frustrująca,
szczególnie, że kilka lat temu pracowałem w projekcie
gdzie serwerem był MS SQL Server, a baza miała kilkanaście terabajtów.
Gdy wtedy count(*) trwał ponad 100 ms
to był to znak że coś jest nie tak z bazą
(przykładowo engine używa złego indeksu
bo się statystyki rozjechały po batch loadingu)

-- 
Robert
Re: wolne select count(*)
#194963
Author: M.M.
Date: Sat, 21 May 2016 08:55
37 lines
2810 bytes
On Saturday, May 21, 2016 at 9:39:29 AM UTC+2, Robert Winkler wrote:
> W dniu 20.05.2016 o 21:17, Borneq pisze:
> > Zapuściłem select count(*) na mySQL, aby zobaczyć jak długo potrwa
> > pobranie danych, ale samo select count(*) wciąż się wykonuje.
> > Dlaczego to tak długo trwa? rozumiem że np. distinct by trwało długo,
> > ale podanie ilości rekordów?
> 
> Witaj w klubie
> Mam dokładnie to samo u siebie :(
> Przy czym serwer stoi u mnie w firmie a nie na jakimś hostingu
> i wiem że nikt inny w tym czasie niczego nie robi z moją tabelą.
> 
> Mam tabele, niedużą, jakieś 28 milionów rekordów,
> 780 MB z danymi plus jakieś 300MB na indeksy,
> engine InnoDB bo muszę mieć transakcje gdy zmieniam te dane.
> Wołam zapytanie:
> select count(*) from `moja_tabela` where `created_at` > '2014-05-01'
> i czekam kilka minut na odpowiedź serwera.
> Nie ważne, że na tabeli mam indeks zawierający tylko kolumnę created_at
> dla mysql'a nie ma to żadnego znaczenia
> i w niczym to nie przyspiesza jego działania.
> 
> Praca z mysql'em jest czasem naprawdę frustrująca,
> szczególnie, że kilka lat temu pracowałem w projekcie
> gdzie serwerem był MS SQL Server, a baza miała kilkanaście terabajtów.
> Gdy wtedy count(*) trwał ponad 100 ms
> to był to znak że coś jest nie tak z bazą
> (przykładowo engine używa złego indeksu
> bo się statystyki rozjechały po batch loadingu)
> 
> -- 
> Robert

Dlatego silniki baz danych powinny mieć opcję, która wzbogaca indeksy o
liczniki.

Pozdrawiam
Re: wolne select count(*)
#194964
Author: Wojtek Gapiński
Date: Sat, 21 May 2016 11:15
11 lines
1380 bytes
W dniu 20-05-2016 o 21:17, Borneq pisze:
> Zapuściłem select count(*) na mySQL, aby zobaczyć jak długo potrwa
> pobranie danych, ale samo select count(*) wciąż się wykonuje.
> Dlaczego to tak długo trwa? rozumiem że np. distinct by trwało długo,
> ale podanie ilości rekordów?

Spróbuj wykonać select count(id), gdzie "id" jest indeksowanym polem.

-- 
Wojtek Gapiński
http://www.jwmprojekt.pl
Re: wolne select count(*)
#194965
Author: M.M.
Date: Sat, 21 May 2016 16:17
1 lines
1364 bytes
jesli ma klauzule where na polu cerate, to moze count(create) 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads