Ostatnio dużo słyszałem, że SQL to okropny język i wydaje się, że każdy framework pod słońcem jest dostarczany z warstwą abstrakcji bazy danych.
Zwróć uwagę, że te warstwy po prostu konwertują własne pliki na SQL. W przypadku większości dostawców baz danych SQLjest to jedyny sposób komunikacji z silnikiem.
Jednak z mojego doświadczenia wynika, że SQL jest często znacznie łatwiejszym, bardziej wszechstronnym i bardziej przyjaznym dla programistów sposobem zarządzania wprowadzaniem i wyprowadzaniem danych. Każda warstwa abstrakcji, której użyłem, wydaje się być wyraźnie ograniczonym podejściem bez realnych korzyści.
… Powód, dla którego właśnie opisałem powyżej.
Warstwy bazy danych niczego nie dodają , po prostu Cię ograniczają . Sprawiają, że zapytania są bezsprzecznie prostsze, ale nigdy nie są bardziej wydajne.
Z definicji w warstwach bazy danych nie ma niczego, czego nie ma SQL.
Co sprawia SQL, że są tak straszne i dlaczego warstwy abstrakcji bazy danych są cenne?
SQL jest fajnym językiem, jednak praca z nim wymaga trochę szaleństwa.
W teorii, SQL jest deklaratywna, czyli deklarujesz, co chcesz dostać, a silnik zapewnia to w najszybszy możliwy sposób.
W praktyce istnieje wiele sposobów sformułowania poprawnego zapytania (czyli zapytania, które zwraca poprawne wyniki).
Optymalizatory są w stanie zbudować zamek Lego z niektórych predefiniowanych algorytmów (tak, jest ich wiele), ale po prostu nie mogą tworzyć nowych algorytmów. Nadal potrzeba pomocy SQLprogramisty.
Jednak niektórzy ludzie oczekują, że optymalizator utworzy „najlepszy możliwy plan”, a nie „najlepszy plan dostępny dla tego zapytania przy danej implementacji SQLsilnika”.
A jak wszyscy wiemy, kiedy program komputerowy nie spełnia oczekiwań ludzi, wini się program, a nie oczekiwania.
Jednak w większości przypadków przeformułowanie zapytania może dać najlepszy możliwy plan. Są jednak zadania, w przypadku których jest to niemożliwe dzięki nowym i stale rozwijającym się ulepszeniomSQL tych przypadków liczba jest coraz mniejsza.
Byłoby jednak miło, gdyby dostawcy zapewnili niski poziom dostępu do funkcji, takich jak „pobierz zakres indeksu”, „pobierz wiersz za rowid” itd., Tak jak Ckompilatory pozwalają na osadzenie asemblera bezpośrednio w języku.
Niedawno napisałem artykuł na ten temat na moim blogu: