[mysql] count, group by, order by, wykonuje się ponad 15s :/ |
[mysql] count, group by, order by, wykonuje się ponad 15s :/ |
2.02.2015, 15:10:13
Post
#1
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
Cześć,
mam takie zapytanie:
niestety wykonuje się ono bardzo długo (>15s) Ktoś może pomóc jak to zoptymalizować? do zapytania
jest ponad 48 000 rekordów
ponad 55 000 rekordów
ponad 4 500 000 rekordów
prawie 1 000 000 rekordów Z góry dziękuję za pomoc [EDIT] Czy może rozbić to zapytanie na dwa:
pobrać id i:
[EDIT2] dopiero dojrzałem że order by idzie asc, nie ma możliwości ustawienia desc.
zamienić powinienem na:
Ten post edytował pionas 2.02.2015, 15:41:35 -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
2.02.2015, 21:30:54
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) |
1)formatuj zapytania. Użycie entera naprawdę nie boli, a czytelność poprawia znacząco
2)pokaz wynik EXPLAIN |
|
|
2.02.2015, 23:05:05
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) |
A po co ci LEFT JOIN ? On psuje...
|
|
|
3.02.2015, 06:24:11
Post
#4
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
Kod id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE a ALL NULL NULL NULL NULL 54927 Using where; Using temporary; Using filesort 1 SIMPLE b ref articles_id articles_id 5 konkursy_db2.a.id,const 33 Using index dodanie indeksu na cid daje: Kod id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a range cid cid 1 NULL 53294 Using where; Using temporary; Using filesort 1 SIMPLE b ref articles_id articles_id 5 konkursy_db2.a.id,const 33 Using index -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
3.02.2015, 19:37:31
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) |
spróbuj dać indeks na a.st lub wspólny na cid i a.st jeśli to ta sama tabela
możesz też spróbować zamienić kolejnością warunki a.st and cid TO_DAYS ile rekordów jest faktycznie wyświetlanych ? to znaczy ile spełnia warunki jeśli pominie się limit |
|
|
3.02.2015, 21:16:16
Post
#6
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
Do wyświetlenia jest 48,511 rekordów...
jeśli pominę count to zapytanie trwa ułamki sekundy, ale wtedy wyświetla 827033 rekordów, gdy dam SELECT DISTINCT bez count to zapytanie trwa ok 1.5s no ale nie zlicza ile osób przeczytało artykuł... Rozbiłem to na dwa zapytania pobieram wszystkie informacje poza count, pętlą pobieram same articles_id i robię
i czas generowania tego wynosi 0,02s... -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
3.02.2015, 21:21:36
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) |
a gdyby przenieść tego counta do podzapytania ?
|
|
|
5.02.2015, 06:35:32
Post
#8
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
a gdyby przenieść tego counta do podzapytania ? tzn? jakiś przykład? mam jeszcze jeden problem:
Kod id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE p ALL NULL NULL NULL NULL 1100625 Using where Indeksy: PRIMARY -> BTREE post_id thread_id -> BTREE thread_id user_id -> BTREE user_id post_deleted -> BTREE (thread_id, post_deleted) post_message -> FULLTEXT post_message czemu nie chce dać indeksu? USE INDEX (post_message) nie działa :/ -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
5.02.2015, 07:11:31
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) |
Czemu nie chce dać indeksu?
Bo masz LIKE. Zastosuj funkcje do FULLTEXTa, to użyje.. |
|
|
5.02.2015, 08:32:29
Post
#10
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Jeżeli być miał LIKE 'ABC%' to by zadziałał, ale tak jak @mmmmmmm napisał użyj funkcji która używa fulltext index
|
|
|
5.02.2015, 15:34:04
Post
#11
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
Dałem:
czemu tak? -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
5.02.2015, 20:16:41
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) |
tzn? jakiś przykład? coś w ten deseń
a jeśli chodzi o wyszukiwanie to spróbuj tak
|
|
|
5.02.2015, 20:48:13
Post
#13
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
coś w ten deseń
a jeśli chodzi o wyszukiwanie to spróbuj tak
1. dzięki, zapomniałem całkiem o czymś takim 2. nie działa, tzn. działa, ale też 136 wyników pokazuje... -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 18:26 |