2010-03-18 14 views
20

Jak działa zapytanie SQL? Jak to się kompiluje? Czy najpierw skompilowano klauzulę from, aby sprawdzić, czy tabela istnieje? W jaki sposób faktycznie pobiera dane z bazy danych? W jaki sposób iw jakim formacie są tabele przechowywane w bazie danych?jak działa zapytanie SQL?

Używam phpmyadmin, czy jest jakiś sposób, aby przejrzeć pliki, w których przechowywane są dane? Używam MySQL

+9

To wielkie pytanie! –

+0

Nie jest to odpowiedź per se, ale tak działa na wysokim poziomie w Oracle. http://www.idevelopment.info/data/Oracle/DBA_tips/Tuning/TUNING_10.shtml – JavaRocky

+0

Czy możesz podać konkretny produkt, który zamierzasz? SQL Server, MySQL, Oracle, itp? –

Odpowiedz

10

Cóż ...

  • pierwsze masz sprawdzanie składni, a następnie generowania drzewa wyrażenie - na tym etapie można również sprawdzić, czy elementy istnieją i „wyrównać” (tj pola nie istnieją WEWNĄTRZ stołu). To jest pierwszy krok - każdy błąd tutaj, po prostu powiedz sprzedawcy, aby stał się prawdziwy.
  • Potem masz ... analizę. Zapytanie SQL różni się od programu tym, że nie mówi JAK coś zrobić, tylko CO WYNIKU. Logika oparta na zestawie. Dostajesz więc analizator zapytań (w zależności od produktu od złego do dobrego - najgorsze wyrocznia Oracle, najbardziej wrażliwe DB2 nawet mierzące prędkość dysku), aby zdecydować, jak najlepiej podejść do tego wyniku. To naprawdę skomplikowana bestia - może próbować dziesiątek lub setek podejść, aby znaleźć taki, który uważa za najszybszy (oparty na kosztach, w zasadzie niektóre statystyki).
  • Następnie zostanie wykonany.

Analizator zapytań, nawiasem mówiąc, jest tam, gdzie widać ogromne różnice. Nie jestem pewien co do MySQL - SQL Server (Microsoft) świeci, że nie ma najlepszego (ale jeden z dobrych), ale ma naprawdę ładne narzędzia wizualne do POKAŻ planu kwerend, porównaj szacunki analizatora do rzeczywiste potrzeby (jeśli różnią się zbytnio statystykami tabeli mogą być wyłączone, więc analizator ZAUWAŻY, że duży stół jest mały). Przedstawiają to ładnie wizualnie.

DB2 od dawna ma świetny optymalizator, mierząc - jak już wspomniałem - prędkość dysku, aby go oszacować. Oracle od dawna "od lewej do prawej" (brak prawdziwej analizy) i podchodził do wskazówek użytkownika (podejście "crap"). Myślę, że MySQL również był BARDZO prymitywny - nie jestem pewien, gdzie to jest teraz.

Format tabeli w bazie danych itp. - to naprawdę coś, czego nie powinno się obchodzić. Jest to udokumentowane (wyraźnie, szczególnie w przypadku bazy danych o otwartym kodzie źródłowym), ale dlaczego powinno Cię to obchodzić? Wykonałem pracę SQL przez prawie 15 lat i nigdy nie miałem takiej potrzeby. Dotyczy to również wykonywania całkiem wysokiej jakości prac w niektórych obszarach. O ile nie spróbujesz zbudować narzędzia do naprawy bazy danych .... nie ma sensu się martwić.

+0

kilka ciekawych informacji tutaj. dzięki. – Learning

+0

@ TomTom dziękuje, jak mówisz, nie muszę się martwić o formaty stołów, ale naprawdę chcę to wiedzieć z ciekawości.Gdybym miał zaprojektować Db, być może zapisałbym moje tabele w csvs i powiedziałbym, że przetwarzanie strinfg do pobierania danych, ale chciałem tylko wiedzieć, jak inni to zrobili? –

+0

zdecydowanie nie tak;) Naprawdę - CSV jest absurdalnie nieefektywny. SQL Server (tylko ja znam szczegóły) używa pliku na stronach o wielkości 8 kB z własną strukturą zarządzania, definiującą zawartość strony. Są strony indeksowe, strony danych itp. Jest naprawdę DUŻO bardziej skomplikowana, żeby być wydajną - plik CSV będzie strasznie nieefektywny. – TomTom

4

To jest dobre pytanie, ale nie można tutaj w pełni odpowiedzieć na to pytanie.

Możesz przeczytać książkę Understanding MySQL Internals, która zawiera odpowiedzi na większość pytań.

1

Jeśli twoim produktem docelowym jest serwer SQL, to dobrym początkiem jest this article.

+0

@thanks zajrzy do !! –