Что не так с SQL?
От: Plague Россия  
Дата: 28.12.07 08:12
Оценка:
В последнее время все больше и больше кажется, что что-то не так с SQL. Не с конкретной реализацией, а вообще.
Вроде бы все замечательно, ну получаются запросы в 1-2 страницы текста — это нормально, но когда приходится изменить "чтоб немного по другому собирало", то приходится переписывать чуть ли не весь запрос. Безусловно, SQL в возможностях запросов данных довольно гибок, но вот костность в описательной структуре запроса удручает.
Что думает по этому поводу народ?
Re: Что не так с SQL?
От: deniok Россия  
Дата: 28.12.07 08:18
Оценка: +1
Здравствуйте, Plague, Вы писали:

P>В последнее время все больше и больше кажется, что что-то не так с SQL. Не с конкретной реализацией, а вообще.

P>Вроде бы все замечательно, ну получаются запросы в 1-2 страницы текста — это нормально, но когда приходится изменить "чтоб немного по другому собирало", то приходится переписывать чуть ли не весь запрос. Безусловно, SQL в возможностях запросов данных довольно гибок, но вот костность в описательной структуре запроса удручает.
P>Что думает по этому поводу народ?

Если ты видишь как свои "немного по-другому" формализовать, напиши DSL, генерирующий SQL
Re[2]: Что не так с SQL?
От: Курилка Россия http://kirya.narod.ru/
Дата: 28.12.07 08:32
Оценка: +1
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, Plague, Вы писали:


P>>В последнее время все больше и больше кажется, что что-то не так с SQL. Не с конкретной реализацией, а вообще.

P>>Вроде бы все замечательно, ну получаются запросы в 1-2 страницы текста — это нормально, но когда приходится изменить "чтоб немного по другому собирало", то приходится переписывать чуть ли не весь запрос. Безусловно, SQL в возможностях запросов данных довольно гибок, но вот костность в описательной структуре запроса удручает.
P>>Что думает по этому поводу народ?

D>Если ты видишь как свои "немного по-другому" формализовать, напиши DSL, генерирующий SQL


А может стоит использовать язык другой, более гибкий и подходящий под задачу (вопрос, конечно, какую именно), скажем тот же K?
Re: Что не так с SQL?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.12.07 08:52
Оценка: 5 (1) +1
Здравствуйте, Plague, Вы писали:

P>Что думает по этому поводу народ?


Не так с ним то, что в базовом SQL'92 крайне скудные возможности реюза. ИМХО следует стараться активнее использовать функции и CTE.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[2]: Что не так с SQL?
От: Plague Россия  
Дата: 28.12.07 08:58
Оценка:
Здравствуйте, deniok, Вы писали:

D>Если ты видишь как свои "немного по-другому" формализовать, напиши DSL, генерирующий SQL


Если было бы все так просто... Конечно, понятно, что есть борьба и с производительностью БД, т.е. кроме требований получения данных надо собрать "оптимальный" запрос, т.е. чтоб работал приемлемо быстро (при заданных условиях). Итак, есть просто бескрайнее поле вариантов как именно сделать выборку данных, но на написание и опробование каждого уйдет уйма времени, поэтому несколько понимая как работает БД и по опыту собираешь так кажется более "оптимально". Но вдруг добавляется условие и встаешь перед дилеммой — переписать запрос, т.к. с учетом новых условий структура оптимального запроса должна быть несколько другой, ИЛИ сделать "подпорку" сделав очередной вложенный подзапрос и прочие такие не очень хорошие решения. %)

Понятно, что некоторые вещи можно решить использованием вьюх. Но по опыту работы иногда приходится от них отказываться, т.к. производительность запроса начинает желать лучшего. Да и когда количество вьюх не одна тысяча — задумываешься клепать ли новую... Так же дело в том на сколько вьюха должна быть простой, т.е. если вьюха сложная — ее тяжело использовать в сложных запросах из-за производительности (так как таких вьюх может быть использовано множество, да и они могут содержать сортировки и группировки, что дает нагрузку), т.е. легче отказаться от ее использования. Если она простая, то смысл использовать ее тоже под вопросом, т.к. на каждую комбинацию 2х-3х-4х таблиц не напишешь вьюху, т.е. количество вьюх стремительно расти.
В использовании вьюх вижу большой бонус в некой фильтрации данных, т.е. не просто сбор со всевозможными справочниками, а именно отбор данных с условиями.

DSL, конечно, прикольно было бы придумать. Т.е. описываешь на нем БД, а он уже собирает SQL-код для все БД.

PS. Мое негативное настроение повлияло, что есть БД (SQL Server 2005) в которой СОВСЕМ НЕТ вьюх и процедур, к которой можно делать только запросы и поэтому запросы получаются не в одну страницу. При этом в каждой таблице есть поле логического удаления записи, которое надо учитывать, множество таблиц связок и т.п., что нисколько не облегчает работу.
Re[2]: Что не так с SQL?
От: Plague Россия  
Дата: 28.12.07 09:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Не так с ним то, что в базовом SQL'92 крайне скудные возможности реюза. ИМХО следует стараться активнее использовать функции и CTE.

Да, CTE радует, т.к. можно вынести некий код из запроса как бы разделив, что значительно упрощает чтение и понимание. Даже комментарии нормально поставить к нему можно, т.к. когда есть гиганский запрос сложно объяснить в чем фишка соединения 15-20 таблиц. =)
Функции — согласен.
Re[2]: Что не так с SQL?
От: Plague Россия  
Дата: 28.12.07 09:20
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Не так с ним то, что в базовом SQL'92 крайне скудные возможности реюза. ИМХО следует стараться активнее использовать функции и CTE.

Единственная проблема CTE — это то, что реюз в рамках одного запроса, а хотелось бы более широкое использование, например в рамках процедуры или пакета.

PS. В Оракле в WITH можно использовать рекурсивный запрос? или нужно использовать CONNECT BY?
Re: Что не так с SQL?
От: Константин Л. Франция  
Дата: 28.12.07 09:31
Оценка:
Здравствуйте, Plague, Вы писали:

[]

Имхо там тупо не хватает что-то наподобие классов/свободных функций. Не знаю как объяснить, но чтобы можно было составлять нормальную композицию из каких-то запросов и тп
Re[3]: Что не так с SQL?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.12.07 09:42
Оценка:
Здравствуйте, Plague, Вы писали:

AVK>>Не так с ним то, что в базовом SQL'92 крайне скудные возможности реюза. ИМХО следует стараться активнее использовать функции и CTE.

P>Единственная проблема CTE — это то, что реюз в рамках одного запроса, а хотелось бы более широкое использование, например в рамках процедуры или пакета.

Ну так inline функции это оно и есть.

P>PS. В Оракле в WITH можно использовать рекурсивный запрос? или нужно использовать CONNECT BY?


ХЗ. Я по Ораклу не специалист.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re: Что не так с SQL?
От: Quintanar Россия  
Дата: 28.12.07 15:09
Оценка: 5 (1) +1
Здравствуйте, Plague, Вы писали:

P>В последнее время все больше и больше кажется, что что-то не так с SQL. Не с конкретной реализацией, а вообще.

P>Вроде бы все замечательно, ну получаются запросы в 1-2 страницы текста — это нормально, но когда приходится изменить "чтоб немного по другому собирало", то приходится переписывать чуть ли не весь запрос. Безусловно, SQL в возможностях запросов данных довольно гибок, но вот костность в описательной структуре запроса удручает.
P>Что думает по этому поводу народ?

Это, наверно, из-за того, что SQL задумывался как простой язык для широкого круга пользователей (читай домохозяек), но на деле вышло, что использовать его стали иначе и, в основном, профессиональные программисты, которым эта простота совсем не нужна, если ради нее приходится жертвовать производительностью и выразительностью. Но что сделано, то сделано, остается только прикручивать к ядру SQL фичи, устраняющие некоторые его недостатки, добавлять спец языки типа tsql и прочее.
Есть, правда, диалекты SQL совмещенные с нормальным языком программирования (Q в kdb+), где у программиста есть вся власть над ядром БД, он всегда знает, что происходит и почему и ничего не оптимизируется автоматически. Т.е. можно сразу писать оптимальный запрос на основе знаний о структуре БД, не пользуясь никакими анализаторами. В результате получаем гибкость обычного языка программирования совмещенную с мощью SQL, в таких условиях запросы укорачиваются, а понятность программы возрастает.
Re[3]: Что не так с SQL?
От: Lloyd Россия  
Дата: 28.12.07 16:08
Оценка: +3
Здравствуйте, Plague, Вы писали:

P>PS. Мое негативное настроение повлияло, что есть БД (SQL Server 2005) в которой СОВСЕМ НЕТ вьюх и процедур, к которой можно делать только запросы и поэтому запросы получаются не в одну страницу.


Как это "СОВСЕМ НЕТ"?
Re[2]: Что не так с SQL?
От: cl-user  
Дата: 29.12.07 09:03
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Есть, правда, диалекты SQL совмещенные с нормальным языком программирования (Q в kdb+), где у программиста есть вся власть над ядром БД, он всегда знает, что происходит и почему и ничего не оптимизируется автоматически.


А "не автоматическая" но и "не ручная" (а-ля "по запросу") оптимизация есть? Или я должен написать половину Оракла?

Q>Т.е. можно сразу писать оптимальный запрос на основе знаний о структуре БД, не пользуясь никакими анализаторами.


А если я вдруг захочу использовать оптимизаторы — "их там есть"?

Q>В результате получаем гибкость обычного языка программирования совмещенную с мощью SQL, в таких условиях запросы укорачиваются, а понятность программы возрастает.


Не понял, как может запрос укоротиться, если мне самому на основании данных "с потолка" придётся указывать: вот здесь делать индексный поиск, а вот здесь fullscan, а вот здесь ты сам проанализируй состав данных и реши какой тип поиска использовать... Да, ещё надо учитывать нахождение данных в кэше (а кто их знает, есть они там или нет...)

Да, для каких-то случаев возможно Ваш способ и будет "гибче и мощнее", но для каждого случая надо анализировать отдельно — какой подход что даст. Ибо SQL это не просто какой-то "язычёк", это, в первую очередь, математика. Плюс "тонны" человеко-лет по оптимизации обработки запросов. А Вы одним махом "на... всю оптимизацию!"
Re[3]: Что не так с SQL?
От: Quintanar Россия  
Дата: 29.12.07 12:03
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>А "не автоматическая" но и "не ручная" (а-ля "по запросу") оптимизация есть? Или я должен написать половину Оракла?


Нет. Хотите — пишите.

CU>А если я вдруг захочу использовать оптимизаторы — "их там есть"?


А что вы будете оптимизировать?

CU>Не понял, как может запрос укоротиться, если мне самому на основании данных "с потолка" придётся указывать: вот здесь делать индексный поиск, а вот здесь fullscan, а вот здесь ты сам проанализируй состав данных и реши какой тип поиска использовать... Да, ещё надо учитывать нахождение данных в кэше (а кто их знает, есть они там или нет...)


Потому, что kdb+ отходит от чистого SQL и фиксирует порядок записей, ты и так знаешь как будет проходить поиск. Если таблица отсортирована, то методом деления пополам, если нет, то полный проход.

CU>Да, для каких-то случаев возможно Ваш способ и будет "гибче и мощнее", но для каждого случая надо анализировать отдельно — какой подход что даст. Ибо SQL это не просто какой-то "язычёк", это, в первую очередь, математика. Плюс "тонны" человеко-лет по оптимизации обработки запросов. А Вы одним махом "на... всю оптимизацию!"


Еще раз повторяю, это не универсальная БД, а узкоспециализированная и требовательная к ресурсам. Свои задачи она полностью решает, программист может писать запросы сразу самым оптимальным в рамках БД способом без всяких там анализаторов и оптимизаторов. Когда нужно обрабатывать миллионы записей в секунду, оптимизаторы идут на юг.
Математикой пугать не надо, реляционная алгебра — это уровень спецкурса 10-го класса средней школы с математическим уклоном.

>>Плюс "тонны" человеко-лет по оптимизации обработки запросов.


Только до сих пор анализатор запроса — это вещь, жизненно необходимая для того, чтобы указать машине, что на самом деле нужно делать.
Re[4]: Что не так с SQL?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.12.07 12:15
Оценка:
Здравствуйте, Quintanar, Вы писали:

CU>>А если я вдруг захочу использовать оптимизаторы — "их там есть"?


Q>А что вы будете оптимизировать?


Ну, например, если есть джойн, нужно принять решение, какую его часть нужно выбирать первой, а какую второй.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[5]: Что не так с SQL?
От: Quintanar Россия  
Дата: 29.12.07 12:18
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну, например, если есть джойн, нужно принять решение, какую его часть нужно выбирать первой, а какую второй.


Это определяется порядком аргументов у функций, которые имеют смысл join. Если по foreign key — key, то вообще ничего явно указывать не нужно.
Re[6]: Что не так с SQL?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.12.07 12:30
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Это определяется порядком аргументов у функций, которые имеют смысл join.


Да, таким манером ты серьезную производительность получишь .
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[7]: Что не так с SQL?
От: Quintanar Россия  
Дата: 29.12.07 12:38
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

AVK>Да, таким манером ты серьезную производительность получишь .


Не жалуются. Во всяком случае, на Oracle менять никому и в кошмарном сне не приснится. Оракл — тормозня.
Re[3]: Что не так с SQL?
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.12.07 13:01
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А может стоит использовать язык другой, более гибкий и подходящий под задачу (вопрос, конечно, какую именно), скажем тот же K?


А может не надо к? А? (с чувством безутешной надежды в голосе)
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Что не так с SQL?
От: deniok Россия  
Дата: 29.12.07 14:24
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>А может не надо к? А? (с чувством безутешной надежды в голосе)


Не хочешь злобный k — пользуй высокоуровневый q.
Re[4]: Что не так с SQL?
От: cl-user  
Дата: 03.01.08 11:14
Оценка: +1
Здравствуйте, Quintanar, Вы писали:

Q>Еще раз повторяю, это не универсальная БД, а узкоспециализированная и требовательная к ресурсам. Свои задачи она полностью решает, программист может писать запросы сразу самым оптимальным в рамках БД способом без всяких там анализаторов и оптимизаторов. Когда нужно обрабатывать миллионы записей в секунду, оптимизаторы идут на юг.


"Ещё раз" — это где? В этом топике не было.
А если вы о том, что для оптимальной работы _вся_ база должна быть в памяти + прочие ограничения на "сложную логику", то с этого и надо было начинать. Для "общего употребления" не годится, ибо по "узкоспециализированным предписаниям".

Q>Математикой пугать не надо, реляционная алгебра — это уровень спецкурса 10-го класса средней школы с математическим уклоном.


А в "узкоспециализированной" её (математики) сколько?

Q>Только до сих пор анализатор запроса — это вещь, жизненно необходимая для того, чтобы указать машине, что на самом деле нужно делать.


Естественно. В тех случаях когда _все_ данные _гарантированно_ не лезут в память, когда какая-то их часть уже может быть в кэше, всех или уже отобранных по подобному критерию... — т.е. когда "что делать" зависит от текущего состояния дел, которое в момент написания запроса неизвестно. И опять же — короче ваш "подробный" запрос не будет.

Ладно, можно "завязывать" — теперь я вас понял и посему претензий не имею
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.