Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Optymalizacja zapytania Mysql
maksik
post 13.07.2017, 13:40:54
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


Witam

Mam tabele zawierającą 1 milion komentarzy do poszczególnych artykułów, składającą się z trzech kolumn.

  1. Id, ArticleId, Message


Id - Auto
ArticleId - id artykułu
Message - treść wiadomości.

Przy pobieraniu komentarzy dla artykułu nr 1 jest przypisanych 10 000 komentarzy które posiadają Id od 1 do 10000.

Używam zapytania

  1. SELECT * FROM table Where ArticleId='1' Order by Id

czas zapytania wynosi 0.0003

natomiast
  1. SELECT * FROM table Where ArticleId='1' Order by Id Desc

czas zapytania wynosi 0.2124


Jak skrócić czas ładowania komentarzy dla tego artykułu jeżeli używam Desc? Wiem, że to dlatego iż sprawdza zapytanie niepotrzebnie pozostałe 990 000 rekordów, ale czy istnieje jakieś optymalne rozwiązanie, aby skrócić czas ładowania?
Go to the top of the page
+Quote Post
nospor
post 13.07.2017, 13:59:43
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) nie
ArticleId='1'
a:
ArticleId=1

2) Masz zalozony index na ArticleId?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 13.07.2017, 14:12:14
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Kod
EXPLAIN SELECT * FROM table WHERE ArticleId=1 ORDER BY Id DESC
Go to the top of the page
+Quote Post
maksik
post 13.07.2017, 14:17:34
Post #4





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


Tak, zapomniałem dodać, że jest dodany indeks dla ArticleId oraz Id. Lecz z indeksem dla ArticleId czy bez nie widać różnic w czasie

Cytat(Pyton_000 @ 13.07.2017, 15:12:14 ) *
Kod
EXPLAIN SELECT * FROM table WHERE ArticleId=1 ORDER BY Id DESC


id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table ref ArticleId ArticleId 4 const 8772 NULL

Ten post edytował maksik 13.07.2017, 14:18:54
Go to the top of the page
+Quote Post
Pyton_000
post 13.07.2017, 14:36:47
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czyli jest ok. Jak masz założone indeksy? pojedynczo czy w grupie? Ale tutaj widać że używany jest index. Ew. może pomóc zwiększenie bufora dla sortowania ale to już wymaga konfiguracji serwera mysql
Go to the top of the page
+Quote Post
maksik
post 13.07.2017, 16:06:57
Post #6





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


czyli normalne są takie opóźnienia jak 0.9s przy tej ilości rekordów?
Go to the top of the page
+Quote Post
Pyton_000
post 13.07.2017, 16:11:48
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Przecież napisałeś że 0.2, tak 0.2 jest znośnie.
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: 19.07.2025 - 15:27