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%)
-----


tak naprawdę to potrzebuję czegoś takiego gdzie 'kiedy' jest polem typu 'datetime' i sensu nabier dopiero jak jest coś wiećej niż id czyli np. jeszcze name możę teraz już nie bezie take masło maślane.
  1. SELECT w.id AS w_id , w.name AS w_name
  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.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. )

i tak naprawdę jest to podzapytanie to zapytania już własciwego ale już tu długo trwa.
natomiast samo
  1. SELECT max(w2.id)
  2. FROM tr_wydanie w2
  3. WHERE w2.wydanie>0 AND w2.kiedy IN (
  4. SELECT max(kiedy)
  5. FROM tr_wydanie
  6. WHERE wydanie > 0 GROUP BY kontrahent_id
  7. )
  8. GROUP BY w2.kontrahent_id

trwa dość szybko. poniżej secundy a nawet 0.00sec pokazuje.
Zupełnie nie rozumiem ma już id wybrane to co ma za problem żeby wybrać po indexie primary_key rekordy (już te z name )



Ja na mój gust to się baza danych sypie. i pewnie sowiqa pomoc zastosuję.
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: 16.10.2025 - 02:14