Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Proste zapytanie SQL a długo trwa.
pogdan
post
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 21.10.2007

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


Dlaczego poniższe zapytanie idzie w minuty tzn trwa do kilku minut w tabeli tr_wydanie jest 800 recordów.
Jest index na id, i na kontrahent_id wg mnie i bez tych indexów powinno chodzić szybko.

  1. SELECT w.id AS w_id
  2. FROM tr_wydanie w WHERE w.id IN (
  3. SELECT max(w2.id)
  4. FROM tr_wydanie w2
  5. WHERE w2.wydanie>0 AND w2.id IN (
  6. SELECT max(id)
  7. FROM tr_wydanie
  8. WHERE wydanie > 0 GROUP BY kontrahent_id
  9. )
  10. GROUP BY w2.kontrahent_id
  11. )


tabela wygląda tak
  1. | id | int(11)
  2. | kontrahent_id | int(11)
  3. | name | varchar(255)
  4. | text | text
  5. | created_on | timestamp
  6. | wplata | double
  7. | action | varchar(64)
  8. | kiedy | datetime
  9.  



Po początkowym wgraniu dumpa chodzi te zapytanie bardzo szybko. Po jakimś czasie trwa kilka minut i już tak zawsze jest. Silnik MyISAM.

Ten post edytował pogdan 8.10.2013, 15:16:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pogdan
post
Post #2





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 21.10.2007

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


sprawa jest rzeczewiscie dziwna bo te zapytanie , robi to samo , i już zasuwa szybko (być może ustanie ta szybkość po jakimś czasie tak przeczuwam)

  1. SELECT w.id AS w_id
  2. FROM tr_wydanie w
  3. INNER JOIN ( SELECT max(w2.id) AS max_id
  4. FROM tr_wydanie w2
  5. WHERE w2.wydanie>0 AND w2.kiedy IN (
  6. SELECT max(kiedy)
  7. FROM tr_wydanie
  8. WHERE wydanie > 0 GROUP BY kontrahent_id
  9. )
  10. GROUP BY w2.kontrahent_id
  11. ) AS w3 ON w.id= w3.max_id



Strange mysql rules

Ten post edytował pogdan 8.10.2013, 16:58:39
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: 14.10.2025 - 21:41