![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę, w której znajduje się ponad 2.500.000 rekordów.
jeżeli wykonuje zapytanie sprawdzające źródła odwiedzin:
to trochę długo się wykonuje: Pokaż wiersze 0 - 3 ( 4 wszystkich, Wykonanie zapytania trwało 8.5397 sekund(y)) Oto moja struktura bazy danych:
Da się to jakoś przyśpieszyć? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Skoro grupujesz po domain to wypadałoby na to pole założyć index
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
hmm, indeks jest nałożony
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 9 Dołączył: 12.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
Pokaż co Ci mówi EXPLAIN
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Struktura:
(IMG:http://imageshack.us/a/img580/4100/explainb.png) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
to:
KEY `page` (`page`,`back`,`domain`,`browser`, `platform`, `keyword`,`ip`), Nie oznacza ze masz nalozony index na domain! Takie cos oznacza ze masz poprawnie;) KEY `domain` (`domain`), |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
w skrypcie pokazuje czas ładowania 4sec, jednak w phpmyadmin ładuje, ładuje i ładuje (IMG:http://imageshack.us/a/img21/8817/localhostlocalhostphpmy.png) jest dobrze? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 158 Pomógł: 43 Dołączył: 9.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Jest źle, baza nie korzysta z indeksu, zamień COUNT(`id`) na COUNT(*) i zobacz EXPLAIN, powinna skorzystać z indeksu. Jeśli dalej nie, to wykonaj polecenie
I jeszcze raz EXPLAIN. EXPLAIN powinien pokazać korzystanie z indeksu, dodatkowo pewnie dalej będzie tworzenie tabeli tymczasowej i filesort, bo masz sortowanie, ale powinno być szybkie jeśli założy tabelę w pamięci, a nie na dysku. Dużo jest tych unikalnych domen? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
"Using index; Using temporary; Using filesort" już jest ok w sumie
tych unikalnych domen w sumie to 3 są, jednak powieliłem to wszystko do testów (IMG:style_emoticons/default/smile.gif) Cytat zamień COUNT(`id`) na COUNT(*) zamieniłem i już czuć różnicę (IMG:style_emoticons/default/smile.gif) Cytat ale powinno być szybkie jeśli założy tabelę w pamięci, a nie na dysku da się ustawić, aby zakładało tabele w pamięci a nie na dysku? jeżeli tak to jak? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
"da się ustawić, aby zakładało tabele w pamięci a nie na dysku? jeżeli tak to jak?"
Da sie, ale trzeba miec dostep do ustawien konfiguracyjnych mysql, sa tam odpowiednie zapisy dal tabel tymczasowych i wielkosci przydzielonego ramu. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
a może mi ktoś pomoże jeszcze z jednym problemem. Chce zrobić licznik średniego czasu spędzonego na stronie:
wynik to: sec eid 7 2097172 2 2097171 9 2097170 4 2097169 14 2097168 a powinno być suma sekund / ilość rekordów Średni czas to: 7.2 nie wiem jak to zsumować (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
normalnie powino byc to tak:
pod warunkiem ze masz dobrze zrobiona baze:) ale u Ciebie moze byc tez tak:
podaj co to jest to eid... i czemu po tym grupujesz? Ten post edytował maly_swd 27.09.2012, 18:32:29 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
jeżeli ktoś wejdzie za pierwszym razem na stronę to do bazy leci wpis o wejściu i inne dane. wtedy do sesji zapisuje id pierwszego wejścia (eid). Jeżeli wejdzie drugi raz to również zapisuje dane do bazy + eid. Domyślnie to pole ma ustawiona wartość 0
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
i jak? dziala Ci ten przyklad z AVG() co podalem?
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
przykład nie działa, błąd #1111 ;/
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
moim zdaniem cos masz namieszane w danych i zalozeniach, czemu liczycz to w taki sposob? UNIX_TIMESTAMP(MAX(`date`))- UNIX_TIMESTAMP(MIN(`date`) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 18:24 |