Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Mega zapytanie
Forum PHP.pl > Forum > Bazy danych
ericdraven
witam. czy spotkał się ktoś z takim przypadkiem aby jakąkolwiek metodą pobrać metodą pobrać całą bazę danych a następnie pracować na wyniku tego działania tak aby nie odpytywać wciąż bazy danych. chodzi jedynie o możliwość operacji select.
Petermechanic
hmm... można to wszystko zarzucić do klas.
prond
Czy można zrobić takiego SELECT'a ? Oczywiście, np tak:
1. Pobierasz listę tabel razem z kolumnami (odpowiednia tabelka w information_schema)
2. Generujesz w skrypcie 2-wymiarową tablicę indeksowaną nazwami kolumn (wszystkimi) i nazwami tabel, w której umieszczasz informacje, czy dana kolumna należy do danej tabeli.
3. W pętli po tabelkach generujesz zapytania, tak aby w klauzuli SELECT były wszystkie kolumny, a te spośród nich które nie należą do danej tabli ustawiasz na NULL.
4. Złączasz te zapytania przez UNION
5. Odpalasz zapytanie
6. Dostajesz odpowiedź i zdajesz sobie sprawę, że pobieranie całej bazy danych jednym zapytaniem jest bez sensu winksmiley.jpg
ericdraven
heh winksmiley.jpg jest z sensem jeżeli próbuję zminimalizować obciążenie bazy danych poprzez jednokrotne jej odpytanie a potem pracy na wyniku za pomocą jakiejkolwiek dostępnej metody etc itd itp. tak się tylko zastanawiałem czy istnieje takowa implementacja.
prond
Moim zdaniem próbujesz wykonać nie swoją robotę. Twoim zdaniem (przynajmniej w kontekście optymalizacji) jest stworzenie odpowiedniej struktury bazy danych (zakładając, że kryterium wydajności jest bardzo ważne możesz nawet złamać 1NF relacji), założenie odpowiednich ograniczeń i index'ów, ustalenie odpowiednich podpowiedzi do optymalizatora itp.

Zachowanie wydajności na odpowiednim poziomie (po wykonaniu powyższych czynności) należy już do SZBD oraz API służącego do komunikowania się z bazą. One już zadbają o cache'owanie zapytań, zbieranie statystyk, odpowiednie rozmiary buforów itp.
Sedziwoj
ericdraven to jest bez sensu, bo jak ma się jakąś bazę to ona nawet 2GB pamięci operacyjnej sie nie zmieści, więc wynika z tego że masz małą bazę, a jak jest mała to obciążenie na niej będzie znikome.
Po drugie aby była spójność danych musiał byś zablokować zapis całej bazy, co jest kolejnym bezsensem.
Jedynym uzasadnieniem pobrania całej bazy danych, jest backup, ale do tego jest specjalny mechanizm, który generuje takie dane.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.