Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania Mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
maksik
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?
nospor
1) nie
ArticleId='1'
a:
ArticleId=1

2) Masz zalozony index na ArticleId?
Pyton_000
Kod
EXPLAIN SELECT * FROM table WHERE ArticleId=1 ORDER BY Id DESC
maksik
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
Pyton_000
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
maksik
czyli normalne są takie opóźnienia jak 0.9s przy tej ilości rekordów?
Pyton_000
Przecież napisałeś że 0.2, tak 0.2 jest znośnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.