В последнее время я много слышал, что SQL - ужасный язык, и кажется, что каждая структура под солнцем поставляется с предварительно упакованным слоем абстракции базы данных.
Обратите внимание, что эти слои просто конвертируют свой собственный материал в SQL
. Для большинства поставщиков баз данных SQL
это единственный способ связаться с движком.
Тем не менее, по моему опыту, SQL часто является гораздо более простым, универсальным и удобным для программиста способом управления вводом и выводом данных. Каждый слой абстракции, который я использовал, кажется явно ограниченным подходом без реальной пользы.
… Причина, которую я описал выше.
Слои базы данных ничего не добавляют , они просто ограничивают вас. Они делают запросы намного проще, но никогда не более эффективными.
По определению, в слоях базы данных нет ничего, чего бы не было SQL
.
Что в этом SQL
такого ужасного и почему так ценны уровни абстракции базы данных?
SQL
- хороший язык, однако, чтобы работать с ним, нужно немного потрудиться.
Теоретически SQL
это декларативно, то есть вы объявляете, что хотите получить, а движок предоставляет это максимально быстро.
На практике существует множество способов сформулировать правильный запрос (то есть запрос, возвращающий правильные результаты).
Оптимизаторы могут построить замок Lego из некоторых предопределенных алгоритмов (да, их несколько), но они просто не могут создавать новые алгоритмы. По-прежнему требуется SQL
помощь разработчика.
Однако некоторые люди ожидают, что оптимизатор выдаст «наилучший возможный план», а не «лучший план, доступный для этого запроса с данной реализацией SQL
механизма».
И, как все мы знаем, когда компьютерная программа не оправдывает ожиданий людей, винят именно программу, а не ожидания.
Однако в большинстве случаев переформулировка запроса действительно может дать наилучший план. Есть задачи, когда это невозможно, однако с новыми и постоянно растущими улучшениями SQL
таких кейсов становится все меньше и меньше.
Однако было бы неплохо, если бы поставщики предоставили некоторый низкоуровневый доступ к функциям, таким как «получить диапазон индекса», «получить строку по rowid
» и т. Д., Например, C
компиляторы позволят вам встроить сборку прямо в язык.
Недавно я написал об этом статью в своем блоге: