Останнім часом я багато чув, що SQL - жахлива мова, і, схоже, кожен фреймворк під сонцем є попередньо упакованим шаром абстракції бази даних.
Зауважте, що ці шари просто перетворюють власні речі в SQL. Для більшості виробників баз даних SQLце єдиний спосіб спілкування з двигуном.
На моєму досвіді, SQL часто є набагато простішим, універсальнішим та зручнішим для програмування способом управління введенням та виведенням даних. Кожен шар абстрагування, який я використовував, здається, є досить обмеженим підходом і не має реальної користі.
... причина, з якої я щойно описаний вище.
Шари бази даних нічого не додають , вони просто обмежують вас. Вони роблять запити суперечливо простішими, але ніколи не більш ефективними.
За визначенням, у шарах бази даних нічого не є SQL.
Що робить SQLтак жахливим і чому цінні шари абстракції баз даних?
SQL це приємна мова, однак для роботи з цим потрібен певний поворот мозку.
Теоретично, SQL це декларативно, тобто ви заявляєте, що хочете отримати, і двигун забезпечує це найшвидшим способом.
На практиці існує багато способів сформулювати правильний запит (тобто запит, який повертає правильні результати).
Оптимізатори здатні створити замок Лего з деяких заздалегідь заданих алгоритмів (так, їх багато), але вони просто не можуть створити нові алгоритми. Все ще потрібно SQLрозробнику, щоб допомогти їм.
Однак деякі очікують, що оптимізатор створить "найкращий можливий план", а не "найкращий план, доступний для цього запиту із заданою реалізацією SQL двигуна".
І як ми всі знаємо, коли комп’ютерна програма не відповідає очікуванням людей, це стає виною саме програма, а не очікування.
Однак у більшості випадків переформулювання запиту може створити найкращий можливий план. Існують завдання, коли це неможливо, однак, з новими і зростаючими вдосконаленнями SQLцих випадків стає все менше і менше.
Хоча було б добре, якби постачальники надавали доступ низького рівня до функцій на кшталт "отримати діапазон індексу", "отримати рядок rowid" тощо, як Cкомпілятори дозволяють вбудовувати збірку прямо на мову.
Я нещодавно написав статтю про це у своєму блозі: