![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 17.09.2004 Skąd: Brzeszcze Ostrzeżenie: (0%) ![]() ![]() |
Mam zrobioną wyszukiwarkę numerów i przy poniższym kodzie wyszukiwanie trwa kilkadziesiąt sekund na dysku lokalnym. Próbowałem korzystać z LEFT JOIN, ale nie wychodziło mi z trzema tabelami, na dwóch chulało, a przy jakiejkolwiek próbie dodania trzeciej tabeli do SELECT-a wywalało błąd.
Oto kod SELECT-a:
Proszę o pomoc, bo nie wiem jak z tego wybrnąć. Nie jestem jeszcze zaawansowany w programowaniu. Przeszukałem zasoby forum i nie znalazłem nic ciekawego. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 18.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
Byloby latwiej gdybys podal strukture tabel...
Domyslam sie, ze moze pomoc zalozenie indeksu (indeksow) na pola MOD i NR_KOD we wszystkich tabelach, ktore sa za pomoca tych pol w jakis sposob powiazane. Ale jak mowie - struktura tabel moglaby troche pomoc w optymalizacji. -------------------- WebHelp.pl
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 17.09.2004 Skąd: Brzeszcze Ostrzeżenie: (0%) ![]() ![]() |
Oto struktura tabel:
# Struktura tabeli dla `data` # CREATE TABLE data ( ID double NOT NULL default '0', NR_RYS varchar(15) default NULL, OPIS varchar(100) default NULL, NR_POS varchar(5) default NULL, QUANT varchar(5) default NULL, NR_KOD varchar(5) default NULL, ZM varchar(255) default NULL, ZAST varchar(255) default NULL, MOD varchar(5) default NULL, PRIMARY KEY (ID) ) TYPE=MyISAM; # -------------------------------------------------------- # # Struktura tabeli dla `tabele2` # CREATE TABLE tabele2 ( ID double NOT NULL default '0', KOD_GR double default NULL, NR_TAB varchar(10) default NULL, NR_KOD varchar(5) default NULL, NT varchar(80) default NULL, IMG varchar(10) default NULL, PRIMARY KEY (ID) ) TYPE=MyISAM; # -------------------------------------------------------- # # Struktura tabeli dla `vehicle` # CREATE TABLE vehicle ( ID double NOT NULL default '0', M varchar(5) default NULL, MODEL varchar(80) default NULL, MOD varchar(5) default NULL, PRIMARY KEY (ID) ) TYPE=MyISAM; |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
prosiłbym jeszcze o jakiś plik z przykładowymi danymi, inaczej trudno się wypowiadać na temat normalizacji tej tabeli. (najlepiej w postaci załącznika, tj. tylko linku do pliku)
A co do pytania opartego o składnie JOIN - oto prost przykład tego zapytania:
-------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 18.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
Pierwsza rzecz, ktora rzucila mi sie w oczy - zmien typ pola ID (w kazdej z tabel) na INT. Uzycie DOUBLE jest tam zbedne - przeciez wartosci pola ID beda zawsze liczbami calkowitymi.
Po drugie - podtrzymuje swoja wypowiedz o koniecznosci zalozenia odpowiednich indeksow (wymienilem je w poprzednim poscie). Oczywiscie nie znam wszystkich relacji pomiedzy tabelami, wiec mozliwe, ze indeksy powinny rowniez zawierac inne pola, ale na potrzeby tego zapytania powinno to wystarczyc. -------------------- WebHelp.pl
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 17.09.2004 Skąd: Brzeszcze Ostrzeżenie: (0%) ![]() ![]() |
Dzięki DeyV, jesteś wielki, właśnie o coś takiego mi chodziło. Powiem Ci szczerze, że próbowałem na podobnej zasadzie, ale nie wiem dlaczego mi nie wychodziło. Chyba zadziałała zasada, że jak zrobi coś początkujący to nie działa, a zrobi to samo fachowiec - rusza od strzału.
![]() ![]() Toszcze, relacje są jak najbardziej prawidłowe, ale dzięki za zainteresowanie i zwrócenie uwagi na ID, już zmieniam. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Poza niezbędnymi indexami (wszystkie złączenia powinny być robione przy pomocy kolumn z indexami) warto by było doprowadzić do stanu, gdy można łączyć tabele tylko przy pomocy kolumn typu INT.
Tym bardziej że ich nazwy niejako same narzucają taki typ. W przypadku gdy nie jest to możliwe - lepiej nawet zastosować klucz (sztuczny?? - jak to się nazywało...) aby uniknąć korzystania z varchar w takich przypadkach. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 17.09.2004 Skąd: Brzeszcze Ostrzeżenie: (0%) ![]() ![]() |
NR_KOD i MOD to kolumny, które zawierają oznaczenia narzucone mi przez bazę, którą otrzymałem w spadku po Accessowej bazie. Moim zadaniem było takie dopasowanie bazy internetowej, aby po jakiejkolwiek zmianie w Accessie można było bez problemu przekonwertować na "internet". Tabela "dane" zawiera 70 tys. rekordów, tabela tabele2 zawiera 4000 rekordów, a tabela "vehicle" tylko 20 rekordów. Wmieniać te wszystkie pola w tych trzech tabelach , przy założeniu, że się powtarzają i składaja się z liter i cyfr, to dla mnie trochę za dużo, a inna sprawa, że musiałbym to robić po każdej aktualizacji Accessa. Chyba zgodzisz się, że lepiej zrobić to na "varchar".
Pozdrowionka i dzięki DeyV |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:13 |