Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Długo wykonujące się zapytanie SELECT
owen
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 7.11.2005

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


Witam,

Mam pewien problem z poniższym zapytaniem SELECT, które wykonuje mi się około 2 sekund. Aktualnie tabela data ma około 3 miliony rekordów natomiast tabela website ma jedynie 10. Aktualnie co udało mi się zrobić to dodałem indeksy w tabeli, ale wykonywanie zapytania się nie skróciło (explain pokazuje, że są używane indeksy, indeksy nałożyłem na tabelę data, dla kolumn stamp i companyId. W przyszłości baza będzie miała jeszcze więcej rekordów oraz klientów którzy będą korzystać ze strony dlatego tak ważne jest zoptymalizowanie tego zapytania.

  1. SELECT
  2. b.name,
  3. d.companyId,
  4. SUM(negative) total_neg,
  5. SUM(positive) total_pos,
  6. ROUND(100-(100/(SUM(negative)+SUM(positive))*SUM(negative))) health
  7. FROM DATA d INNER JOIN website b USING(companyId)
  8. WHERE
  9. stamp LIKE ?
  10. AND
  11. d.companyId = ?


Problem może leżeć w źle nadanych indeksach ?

Z góry dzięki za pomoc!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
owen
post
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 7.11.2005

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


Dzieki mmmmmmm za odpowiedz.

Dodalem do zapytania GROUP BY companyId. Utworzylem indeks na data(companyId, positive, negative), kiedy uzyje zapytania z explain dostaje

  1. id select_type TABLE type possible_keys KEY key_len ref rows Extra
  2. 1 SIMPLE d ref index_companyId index_companyId 8 const 2557037 USING WHERE; USING INDEX
  3. 1 SIMPLE b ALL \N \N \N \N 7 USING WHERE


a zapytanie teraz wyglada tak:

  1. SELECT
  2. b.name,
  3. d.companyId,
  4. SUM(negative) total_neg,
  5. SUM(positive) total_pos,
  6. ROUND(100-(100/(SUM(negative)+SUM(positive))*SUM(negative))) health
  7. FROM DATA d INNER JOIN website b USING(companyId)
  8. WHERE
  9. stamp LIKE ?
  10. AND d.companyId = ?
  11. GROUP BY companyId;


Wykonanie takiego zapytania zajmuje okolo 3 sek. Jest jakas mozliwosc optymalizacji bez koniecznosci zmiany DBMS ?

Dzieki
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 08:08