Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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
 
Start new topic
Odpowiedzi
mkozak
post
Post #2





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

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: 11.10.2025 - 10:19