Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> optymalizacja zapytania
zwierzołak
post
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 25.03.2008

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


Witam,

Mam trzy tabele z danymi: `artykuly`, `artykuly_specjalne` (połączone po polu `id`) i `archiwum`. Muszę przenieść z `artykuly` do `archiwum` wszystkie rekordy, których niema w tabeli `artykuly_specjalne` i są starsze niż 2 miesiące.

Napisałem takie zapytanie:
  1. INSERT INTO `archiwum`(
  2. SELECT *
  3. FROM `artykuly`
  4. WHERE artykuly.id NOT IN (SELECT id FROM `artykuly_specjalne`)
  5. AND DATEDIFF(NOW(),artykuly.timeStamp) > 60
  6. )


dla 1000 rekordów działa to 4 minuty, trochę za długo biorąc pod uwagę, że rekordów są setki tysięcy. Jak zoptymalizować to zapytanie, żeby działało szybciej?

Ten post edytował zwierzołak 26.06.2010, 11:57:47
Go to the top of the page
+Quote Post
sebekzosw
post
Post #2





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


dorobić w 2 tabelach pole w których będzie 1 OR 0 - jeżeli 0 to nie jest w archiwum, a jeżeli 1 to jest w archiwum. w ogóle pozbyć się tabeli archiwum i dodać w zapytaniach odpowiedni warunek (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mkozak
post
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

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


Cytat(zwierzołak @ 26.06.2010, 11:56:05 ) *
  1. INSERT INTO `archiwum`(
  2. SELECT *
  3. FROM `artykuly`
  4. WHERE artykuly.id NOT IN (SELECT id FROM `artykuly_specjalne`)
  5. AND DATEDIFF(NOW(),artykuly.timeStamp) > 60
  6. )


Zapytanie prawie dobre:

  1. INSERT INTO `archiwum`(
  2. SELECT *
  3. FROM `artykuly`
  4. WHERE artykuly.id NOT IN (SELECT id FROM `artykuly_specjalne` WHERE id = artykuly.id)
  5. AND DATEDIFF(NOW(),artykuly.timeStamp) > 60
  6. )


wtedy podzapytanie zwróci ci 1 lub 0 wyników, a nie X
Go to the top of the page
+Quote Post

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: 3.10.2025 - 01:26