![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam mam następujące dwie tabele:
tabela klienci
oraz tabela testy klientów
I mam trzy zapytania wyciągające dane zawarte w tabeli klienci, ale nie mające równoważnych rekordów w drugiej tabeli testy. Oto te zapytania: 1)
2)
oraz 3)
I teraz pytanie: zakładając, że będzie bardzo dużo (setki tysięcy) rekordów spełniających warunek: rekord w tabeli podstawowej, ale brak w tej drugiej, którego zapytania użyć najlepiej? Nie mam tylu danych, żeby sprawdzić i porobić testy. W sumie zależy mi na odpowiedzi co do zasady, jak postępować w takich sytuacjach. ps. silnik InnoDB; select version() zwraca: Mysql 5.0.51a-24+lenny2+spu1 Pozdrawiam. darko -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Nie mam tylu danych, żeby sprawdzić i porobić testy. A nie możesz ich wygenerować? ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
1) Podzapytanie skorelowane, czyli coś czego chcemy unikać
2) To w ogóle daje Ci takie wyniki jak chcesz? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedzi. Odnośnie tworzenia mega zbioru rekordów na potrzeby testów - ok jak tylko znajdę chwilę - zrobię testy porównując czasy. Jaka pula rekordów byłaby miarodajna? Generalnie chodzi mi o to co jest bardziej wydajne w poleceniach select: operacje na indeksach czy korzystanie z joinów?
~Mchl - 1) skreślam z listy. 2) tak, wszystkie 3 zapytania zwracają poprawne dane. -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Ad 2) Moim zdaniem mylisz się, albo nie rozumiem co chcesz uzyskać.
Jeżeli będziesz miał w tabeli customers rekordy o id_customers 1,2,3,4 a w tabeli customers_test rekordy o id_customers 2, 4 to w wyniku tego zapytania dostaniesz: Kod c.id_customers, t.id_customers
1,2 1,4 2,4 3,2 3,4 4,2 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
![]() ![]() -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 2 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
najszybszy powinien być left join (rozwiązanie 3)
kiedyś testowałem i jest to naprawdę wydajne. przy czym jeżeli zależy ci bardzo na wydajności to zrezygnuj z * na rzecz wylistowania ręcznego kolumn |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 00:58 |