![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 5 Dołączył: 23.10.2006 Skąd: Gda?sk Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Od paru godzin optymalizuje zapytanie do dwoch tabel, w jednej (t1) jest okolo 120000 rekordow w drugiej (t2) ok 2400000. t1 jest w relacji jeden do wielu z t2, na jeden wiersz z t1 przypada okolo 30, 40 rekordow w t2. Pytanie czy troche ponad 4s to szczyt mozliwosci mysql-a w takich przypadkach?? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zapytania typu
nie są dobrym pomysłem, a już na pewno nie przy takiej ilości rekordów. Zapytanie takie działa w prosty sposób: 1. tworzy iloczyn kartezjański obu tabel (czyli każdy z każdym) 2. wybiera z tego iloczynu pary spełniające warunek Czyli jeżeli masz dwie tabele po 1k rekordów, a warunek spełnia tylko jedna para, to i tak najpierw będzie stworzonych milion par, a dopiero wybrany jeden wynik. Rozwiązanie - JOIN. Poczytaj, na pewno przyspieszysz działanie. Dalej. where t1.type = 'typ' Dużo szybciej działa porównywanie typu INT niż VARCHAR. Powinieneś te typy zapisywać jako liczby, a jeżeli nie możesz tego zmienić, to nawet stwórz dodatkowe pole typu INT, załóż na niego index i wstaw wartości odpowiadające typom (jakoś to sobie ustal). Jeżeli masz kodowanie bazy inne niż binarne (a powinieneś w tym przypadku), to nie ma konieczności stosować ucase(), bo wtedy baza jest nieczuła na wielkości znaków. Tyle mi się nasunęło na obecną chwilę. Ten post edytował sowiq 19.02.2009, 16:31:49 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 01:49 |