Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Liczenie rekordów
acztery
post 15.03.2006, 00:17:32
Post #1





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


witam,

mam tabele z 220 tys rekordów

i chce policzyc wszystkie ktore spelniaja jakis warunek ale to tra bardzo dlugo. ok 30 sek.

  1. SELECT Count(id)
  2. FROM prg
  3. WHERE UserID='Ux1'


czy mysql ma jakies wbudowane funkcje np count_big tak jak w sql server 2000

Ten post edytował acztery 15.03.2006, 00:18:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
tmk
post 15.03.2006, 00:24:29
Post #2





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 15.04.2004
Skąd: w-wa

Ostrzeżenie: (0%)
-----


Pamiętałeś o indeksie na UserID?
Go to the top of the page
+Quote Post
acztery
post 15.03.2006, 00:28:34
Post #3





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


tak i na id tez jest czy na postgresie bedzie szybciej z bardzo duzo iloscia rekordów( ok 1 000 000 )
Go to the top of the page
+Quote Post
DeyV
post 15.03.2006, 00:51:50
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Manual MySQL podpowiada


Cytat
If you very often need to calculate results such as counts based on information from a lot of rows, it's probably much better to introduce a new table and update the counter in real time. An update of the following form is very fast:
  1. UPDATE tbl_name SET count_col=count_col+1 WHERE key_col=constant;


This is really important when you use MySQL storage engines such as MyISAM and ISAM that have only table-level locking (multiple readers / single writers). This will also give better performance with most databases, because the row locking manager in this case will have less to do.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
acztery
post 15.03.2006, 00:55:42
Post #5





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


nie rozumiem to robi update.

---

czyli przy dodawaniu rekordu zwieksza sie ilosc dodanych rekorow dla danego usera i wtedy zamiast liczyc selectem wyciagam ile danych user ma rekordów tak ?
czy nie ?
Go to the top of the page
+Quote Post
DeyV
post 15.03.2006, 01:12:52
Post #6





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Tak.
Czyli po prostu dodatkowa tablea / kolumna, przechowująca informację o ilości rekordów przypożądkowanych do danego usera.


W PgSQL można by sobie życie ułatwić jeszcze bardziej, i dodać trigery uruchamiane podczas dodawania i usuwania rekordów z prg które wprowadzałyby tą wartość automatycznie.

Niestety - nie ma innego wydajnego rozwiązania. W każdej bazie, szczególnie przy kluczach tekstowych, count() będzie wolne.


Ewentualnie możesz sprawdzić, jak wyglądałaby wydajność wyrażenia:
  1. SELECT SQL_CALC_FOUND_ROWS *
  2. FROM tbl_name
  3. WHERE id = " "


Ten post edytował DeyV 15.03.2006, 01:58:30


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
acztery
post 15.03.2006, 22:01:06
Post #7





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


DeyV wiem dzieki juz to wyczytałem , wydaje się być szybciej. dzięki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:42