powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сложные SQL запросы на языке LINQ
135 сообщений из 135, показаны все 6 страниц
Сложные SQL запросы на языке LINQ
    #39306240
sheich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги,
Начинаю только осваивать LINQ
Пока складывается впечатление, что, грубо говоря, то, что можно на той или иной реализации SQL реализовать в одном запросе, поворачивая данные как тебе угодно, средствами LINQ - так же в одном запросе - реализовать практически невозможно. Либо это будет уже не запрос, а какой-то научный трактат... и тормозить будет безбожно.
Дальше, наблюдая практику обращения с LINQ, дата контекстами, отдельными сущностями и т.п. в существующем проекте, с которым сейчас разбираюсь постепенно прихожу к выводу, что стиль работы с LINQ сводится к выборке малыми простыми запросами отдельных частей данных с последующими пошаговыми манипуляциями с ними.
Например, реализовать в одном запросе сложный join (особенно если left) с кучей условий по каждому join - обреченная на провал идея.
Так какие же подходы примеными на практике?
Поправьте, если неправ
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306247
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheich,

Вкратце: LINQ имеет все те же возможности, что и SQL, плюс let и ассоциации, которых в SQL нет. left join в LINQ неудобен, но на практике стараются пользоваться ассоциациями, самому описывать join приходится редко.

Выводы делай сам.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306282
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheichТак какие же подходы примеными на практике?
Поправьте, если неправ

Для начала необходимо понять, что LINQ это не альтернатива SQL, никогда ей не была, и вовсе не задумывалось таковой. Поэтому сравнивать SQL vs LINQ — вообще не корректно, в принципе. Это как сравнивать пилу с молотком.

Поэтому составлять впечатления о LINQ через призму SQL — не правильно. Да, LINQ может транслироваться в SQL. Но суть у них разная. SQL оперирует таблицами, а LINQ коллекциями. У таблицы не может быть поля-коллекции, а у LINQ может. У SQL не может быть поля-записи-из-другой-таблицы, а у LINQ может.

Обычно, если данные хорошо нормализованы и укладываются в объектную модель приложения, то запросы на LINQ писать гораздо легче, они понятнее, логичнее и проще, чем аналог на SQL.

С другой стороны на SQL можно написать ТАКОЕ, что в LINQ сделать почти не реально... вот только надо понимать, такие запросы изначально нафиг не нужны были в LINQ, а если пристально присмотреться, то скорее всего необходимость таких адских запросов — это большой косяк в разработке. Но то такое...
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306340
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПоэтому составлять впечатления о LINQ через призму SQL — не правильно.Правильно, если планируем применять LINQ для генерации SQL.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306369
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПравильно, если планируем применять LINQ для генерации SQL.

Так почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306405
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КПравильно, если планируем применять LINQ для генерации SQL.
Так почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.
Ну, например, потому, что SQL-запросы писать в коде на C# бывает менее удобно и производительно, чем на LINQ. Хотя дело вкуса, конечно.
Я вот и SQL-ем и LINQ-ом пользуюсь. Причем SQL-ем чаще, но только потому, что знаю его лучше, чем LINQ.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306459
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyНу, например, потому, что SQL-запросы писать в коде на C# бывает менее удобно и производительно, чем на LINQ. Хотя дело вкуса, конечно.
Я вот и SQL-ем и LINQ-ом пользуюсь. Причем SQL-ем чаще, но только потому, что знаю его лучше, чем LINQ.

Я вообще не пользуюсь SQL-ем, кроме крайне специфичных случаев. Не потому что LINQ мне кажется более выразительным, чем SQL. А потому, что на LINQ решаются задачи, специфичные для LINQ, а именно — извлечение данных объектов. На практике выяснилось: то, что раньше решалось сложными SQL с листингом не несколько страниц, проще решается избыточным хранением данных в нужном виде.

Например,

SQL-style: десятки JOIN-ов (INNER, LEFT/RIGHT, OUTER) с массой EXISTS/WHERE подвыборками, группировоками, и тому прочее.

LINQ-style: ведение параллельно в БД отдельной плоской структуры всех необходимых данных, к которой осуществляется простой доступ как к коллекции. Да, избыточно. Да, слегка снижается скорость прямой записи/изменений (это если не делать отложенную очередь). Но, крайне эффективные молниеносные выборки, быстрее, чем SQL-style, местами на порядки. Очень понятно для сопровождения, поддаётся контролю и полному тестированию. Не зависит от природы СУБД.

Промежуточный способ: сделать SQL-View и отразить её, как таблицу. Удобно для тех, кто способен понимать только SQL-style, удобно, когда задачу надо решить экстремально быстро и плевать на последствия. Неудобно для сопровождения, практически не тестируется модульно, грозит большим увесистым долгом. Сложно транслировать решение на другую СУБД или вообще на NoSQL.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306467
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL - вообще трешак, как можно серьезно воспринимать запросы на >35 страниц? Как их дебажить?

LINQ - наше всё.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306501
sheich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

возможно) пока не очень знаком с linq
но пока впечатление такое, что предлагается как раз отложить в сторону пилу и все делать только молотком
а пила то и была заточена именно под обработку реляционных данных и прекрасно с этим справляется и много лет оттачивалась и совершенствовалась. кроме того sql - он внутри субд, там, на месте все запрашивает и знает, как и чего. linq же как и любые другие запросы извне, со стороны приложения все-таки дергает раз за разом базу снаружи и это само по себе извращение, имхо
я всегда шел по пути кесарю-кесарево: sql - для таблиц в бд, c#/java etc. - для приложения, коммуникации, сервисов, javascript/css - для интерфейса. не мешаем мухи и котлеты
а тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными
идея сама по себе странная
но подход у нынешнего работодателя такой(
все таки, каждая часть системы должна заниматься своей работой. и за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306508
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueSQL - вообще трешак, как можно серьезно воспринимать запросы на >35 страниц? Как их дебажить?

Все зависит от уровня подготовки.
Есть люди которые запросто работают с хп, в которых только объявление временных таблиц занимает >35 страниц.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306509
Перегонщик перекупки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПромежуточный способ: сделать SQL-View и отразить её, как таблицу.

или прямо на sql-запрос отмапить DTO. SQL-View / sql-запрос на мой взгляд самый разумный компромисс.

hVosttУдобно для тех, кто способен понимать только SQL-style, удобно, когда задачу надо решить экстремально быстро и плевать на последствия . Неудобно для сопровождения, практически не тестируется модульно, грозит большим увесистым долгом .

сильно категорично. часто запросы для DTO реально сложные (всякие аналитические функции и пр.) и заточены на обработку именно "реляционного отношения", а не "списка объектов". к тому же обратное отображение O->R для них не надо.

hVosttСложно транслировать решение на другую СУБД или вообще на NoSQL.

или вообще на Java под Linux
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306533
sheich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttТак почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.
просто таков подход компании. никто не хочет связываться с sql

hVosttСложно транслировать решение на другую СУБД или вообще на NoSQL.
самое смешное в том, что, вот, часто по поводу той или иной "платформонезависимой" (субд-независимой) технологии ее сторонники кричат и упирают на это ее преимущество - абстрагированность от операционной системы, уровня данных бла-бла. но на практике разве часто встречаются компании, которые бы регулярно меняли платформу? по моему опыту-нет. если уж компания подсела на windows, ms exchange, mssql или oracle, linux, то уж не слезет с проверенной технологии. кому нужны такие риски? кому нужно новых специалистов искать, растить?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306551
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheichя всегда шел по пути кесарю-кесарево: sql - для таблиц в бд
sheichа тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными
идея сама по себе странная

А ничего и не поменялось. SQL — это средство для работы с СУБД. Если говорить о БД, то «помойка с простыми таблицами» это и есть самая суть БД. Да, именно. Хранилище данных. Чем проще — тем лучше.

Или вы не получите удовлетворения от результата работы, если все слишком просто? Надо обязательно усложнить! Триггеры! Табличные процедуры! )))))

В LINQ ничего не перемешано, это уровень абстракции.

Правильно было бы провести такую аналогию:

asm → C/C++ (реализация языка написана на ассемблере)
SQL → LINQ (данные из БД LINQ достаёт посредством SQL)

Никто же сейчас не нудит, дескать, чего это никто на ассемблере не кодит, все на языки высокого уровня перешли. Даже грустно как-то


sheichно подход у нынешнего работодателя такой(

При чём тут работодатель? Обойдите свой вопрос с другой стороны и посмотрите с другой точки зрения. Ведь даже памятник Пушкину с определённой стороны это всего лишь каменная жопа

sheichи за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы

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

Кесарю — кесарево. Сами сказали.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306556
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перегонщик перекупкисильно категорично. часто запросы для DTO реально сложные (всякие аналитические функции и пр.) и заточены на обработку именно "реляционного отношения", а не "списка объектов". к тому же обратное отображение O->R для них не надо.

И в 90% если сесть и хорошенько подумать, то задача удивительным образом декомпозируется и теряет свою «реляционную» привязанность. Зачастую, я уже неоднократно с этим сталкивался, проблема кроется в «реляционном» мышлении. Когда человек автоматически любые данные старается сразу разложить по таблицам и организовать между ними связи. С одной стороны круто, но с другой — тупик. Надо мыслить шире, реляционная модель крутая, но одна всего лишь одна из, и не панацея.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306588
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВсе зависит от уровня подготовки.

Что делает этот запрос? Написано человеком.

Код: sql
1.
SELECT TRIM(' ' FROM UPPER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))), TRIM(' ' FROM INITCAP(LOWER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))))||' '||TRIM( ' ' FROM((DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,NULL,SUBSTR(FULLNAME,INSTR(FULLNAME,' ')))))) FROM MINEUSERS
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306591
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueЕвгенийВВсе зависит от уровня подготовки.

Что делает этот запрос? Написано человеком.

Код: sql
1.
SELECT TRIM(' ' FROM UPPER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))), TRIM(' ' FROM INITCAP(LOWER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))))||' '||TRIM( ' ' FROM((DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,NULL,SUBSTR(FULLNAME,INSTR(FULLNAME,' ')))))) FROM MINEUSERS



В блокноте, кстати.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306639
garbushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Monochromatique,
Это сложный sql запрос?
из фио выбрать ФАМИЛИЮ, Фамилия ........
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306645
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique
В блокноте, кстати.
Преобразует имя юзверя к божескому виду.
1. за такой код, без отступов и комментариев надо молотком один раз по пальцам и два раза по башке.
2. к РСУБД он имеет весьма опосредственное отношение
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306651
garbushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MonochromatiqueВ блокноте, кстати.
блокнот не самое удобное средство для написания sql,
можно и верх ногами писать ... на заборе .....
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306670
sheich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MonochromatiqueЧто делает этот запрос? Написано человеком.
В блокноте, кстати.
не показательный пример
запрос не производит сложной выборки данных, а занимается уже обработкой представления данных
а это, имхо, уже задача не SQL как раз
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306687
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВПреобразует имя юзверя к божескому виду.

Ну, с такой трактовкой, в LINQ это выглядело бы так -

Код: c#
1.
userFIO = FIO.to_bojeskiy_vid();



Без отступов и комментариев. Так что LINQ всё равно впереди.

Распелись - запрос в три строчки - никто не может ЧЕТКО сказать, что он делает.

Вот вам и "падгатовка", отступы с комментариями. ))))


ЕвгенийВ2. к РСУБД он имеет весьма опосредственное отношение

Угу. А 50 страниц черного текста ЗУП-овского треша имеют?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306689
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garbushkaMonochromatique,
Это сложный sql запрос?

Не знаю. Но от тебя я отчета не увидел.

Твое сообщение мне дешифровать не удалось. )))
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306690
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiquegarbushkaMonochromatique,
Это сложный sql запрос?

Не знаю. Но от тебя я отчета не увидел.

Твое сообщение мне дешифровать не удалось. )))

Извини, ответа не увидел.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306717
Перегонщик перекупки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueНу, с такой трактовкой, в LINQ это выглядело бы так -

Код: c#
1.
userFIO = FIO.to_bojeskiy_vid();





а в SQL так
Код: plsql
1.
to_bojeskiy_vid(fio)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306804
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheichMonochromatiqueЧто делает этот запрос? Написано человеком.
В блокноте, кстати.
не показательный пример
запрос не производит сложной выборки данных, а занимается уже обработкой представления данных
а это, имхо, уже задача не SQL как раз

в целом, да. но иногда, особенно, когда это представление зависит не только от текущей записи, а еще от других, лучше, все же, SQL (конечно, если это полноценная СУБД, типа ORACLE или SQL SERVER)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306814
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИ в 90% если сесть и хорошенько подумать, то задача удивительным образом декомпозируется и теряет свою «реляционную» привязанность . Зачастую, я уже неоднократно с этим сталкивался, проблема кроется в «реляционном» мышлении

Объектное "мышление"
1. get(id)
2. save(entity)
3. delete(id/entity)
"Реляционное"
4. (камень преткновения) - getList

разница м/ду 1,2,3 и 4 - очевидна: "объект" vs "отношение". в простых случаях можно сделать равно между "список объектов" и "отношение". но это как "линейное уравнение частный случай не линейного".
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306818
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttLINQ-style: ведение параллельно в БД отдельной плоской структуры всех необходимых данных, к которой осуществляется простой доступ как к коллекции. Да, избыточно. Да, слегка снижается скорость прямой записи/изменений (это если не делать отложенную очередь). Но, крайне эффективные молниеносные выборки, быстрее, чем SQL-style, местами на порядки. Очень понятно для сопровождения, поддаётся контролю и полному тестированию. Не зависит от природы СУБД.

БД - она, как правило уже есть, и она - не в зоне разработчика. и она может быть древним говном мамонта. и приложения должны уметь с ним работать, и умеют они с ними работать. а вот то, как ты предлагаешь надругаться над БД... наверное деньги тебя ослепили
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306830
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueЕвгенийВВсе зависит от уровня подготовки.

Что делает этот запрос? Написано человеком.

Код: sql
1.
SELECT TRIM(' ' FROM UPPER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))), TRIM(' ' FROM INITCAP(LOWER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))))||' '||TRIM( ' ' FROM((DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,NULL,SUBSTR(FULLNAME,INSTR(FULLNAME,' ')))))) FROM MINEUSERS


ИМХУ Этот запрос занимается изнасилованием сервера. Сервер БД должен хранить, читать и писать с поддержанием целостности БД. Всё. Что-то считать он не должен (как тут какой-то парсинг строк), т.к. это делается в ущерб всем остальным юзерам, использующим БД.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306834
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheichа тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными
идея сама по себе странная
но подход у нынешнего работодателя такой(
все таки, каждая часть системы должна заниматься своей работой. и за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы
Рано или поздно наступят на грабли потери производительности. БД это узкое место любой централизованной системы, начнет тупить из-за блокировок и хоть запокупайся новых железяк, не параллелятся блокировки в БД, все-равно будет висеть и тормозить.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306835
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMonochromatiqueпропущено...


Что делает этот запрос? Написано человеком.

Код: sql
1.
SELECT TRIM(' ' FROM UPPER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))), TRIM(' ' FROM INITCAP(LOWER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))))||' '||TRIM( ' ' FROM((DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,NULL,SUBSTR(FULLNAME,INSTR(FULLNAME,' ')))))) FROM MINEUSERS


ИМХУ Этот запрос занимается изнасилованием сервера. Сервер БД должен хранить, читать и писать с поддержанием целостности БД. Всё. Что-то считать он не должен (как тут какой-то парсинг строк), т.к. это делается в ущерб всем остальным юзерам, использующим БД.

ничего смертельного с сервером не произойдет. если вдруг затупит на этом месте, тут другая будет причина, но не строковые ф-ии
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39307342
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpsheichпропущено...

не показательный пример
запрос не производит сложной выборки данных, а занимается уже обработкой представления данных
а это, имхо, уже задача не SQL как раз

в целом, да. но иногда, особенно, когда это представление зависит не только от текущей записи, а еще от других, лучше, все же, SQL (конечно, если это полноценная СУБД, типа ORACLE или SQL SERVER)В LINQ так же есть вложенные запросы, которые прекрасно транслируются во вложенные запросы SQL.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39307343
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КПравильно, если планируем применять LINQ для генерации SQL.

Так почему бы тогда сразу не писать SQL?Потому что запросы писать на LINQ удобнее, модифицировать такой код удобнее.
hVosttПравильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.Какая моя постановка задачи неправильная? Ты о чём?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39308430
sheich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я пишу запрос на SQL я всегда могу использовать все преимущества индексирования, расширенных возможностей T-SQL или PL/SQL и добиться максимальной скорости / адекватности запроса. Если LINQ "за меня" сама генерит SQL, то одному Богу известно, какие именно запросы она строчит и шлет в БД... Вот в чем засада. В отстствии контроля. Это - черный ящик.
Я тут случайно вместо того, что бы запринтовать в лог значения полей коллекции вывел SQL-запросы, которые генерит LINQ для получения поля этой коллекции и ужаснулся... И понял, почему LINQ так тормозит.
Вобщем, я не вижу какого-то адекватного, простого использования LINQ в случае работы с большими массивами данных в БД.
ОК, она пишет за меня SQL и вытянуте данные переводит во временные (в памяти) коллекции. Потом, видимо я должен оперировать уже коллекциями. Но они же, вот, не могут быть проиндексированы, например, в отличие от таблиц?...
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39308704
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheichНо они же, вот, не могут быть проиндексированы, например, в отличие от таблиц?...

Коллекции бывают разными
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39308740
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheich... и ужаснулся... И понял, почему LINQ так тормозит.... и возрадовался дух Мой о Боге Спасителе Моем.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39309984
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sheichЕсли я пишу запрос на SQL я всегда могу использовать все преимущества индексирования, расширенных возможностей T-SQL или PL/SQL и добиться максимальной скорости

Дыма без огня не бывает. Если тебе приходится писать такие зубодробительные запросы, значит изначально БД была спроектирована через одно место. Значит поддержка этого УГэ будет стоить бешенных денег, сил и тонны нервов разработчиков, особенно тех, кто придёт на проект позже. Значит любое изменение с структуре БД это поход пешим шагом по минному полю.

Я могу добиться максимальной скорости — такой подход уместен на гонках, где за долю выигранных микросекунд можно отхватить увесистую медаль. Но в реальных приложениях в реальном мире решает совершенно другое. Простота, понятность, сопровождаемость, тестируемость. Это всё часто идёт вразрез с «расширенными возможностями T-SQL/PL-SQL». Но если очень хочется — никто не запрещает.

Есть ряд задач, ориентированных на обработку данных. Но их меньшинство. И обычно их можно выделить и инкапсулировать от остального комплекса. Там уместно применение расширенного SQL, но там LINQ точно нафиг не сдался.


sheichЯ тут случайно вместо того, что бы запринтовать в лог значения полей коллекции вывел SQL-запросы, которые генерит LINQ для получения поля этой коллекции и ужаснулся... И понял, почему LINQ так тормозит.

Есть несколько причин, почему тормозит LINQ:

1. Кривая структура БД, изначально не подходящая для задач, решаемых LINQ
2. Запрос LINQ составлен так, как он был бы составлен в SQL, тогда как LINQ не предназначен собирать данные из таблиц, ему суждено оперировать коллекциями и объектами, которые друг с другом изначально связаны (а через JOIN как в SQL)
3. SELECT N+1

Есть у нас проекты, где используются исключительно LINQ, огромные БД с наличием таблиц, содержащих миллионы и миллиарды записей. Ничего не тормозит. Все запросы в БД эффективные, если некоторые и можно было бы улучшить, применив джедайство SQL, это в общей картине не изменит ничего.


sheichВобщем, я не вижу какого-то адекватного, простого использования LINQ в случае работы с большими массивами данных в БД.

Всё зависит от изначальной задачи. Если массив данных это коллекция объектов, проблемы нет. А если это просто какой-то набор таблиц, спроектированный через одно место, и чтобы получить какие-то данные, надо выкатить листинг SQL на пару страниц, то это уже совершенно к другому врачу

Если задача — пережевывать огромную кучу данных, где нет целостных объектов, а просто какие-то данные, разбросанных по таблицам без общего соблюдения принципов нормализации, то конечно, тут нафиг LINQ не упёрся.

sheichОК, она пишет за меня SQL и вытянуте данные переводит во временные (в памяти) коллекции. Потом, видимо я должен оперировать уже коллекциями. Но они же, вот, не могут быть проиндексированы, например, в отличие от таблиц?...

Странный вопрос. Зачем их индексировать в памяти? Какая изначальная задача?

Сравнивать LINQ vs SQL — уже по сути неправильно.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39309985
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПотому что запросы писать на LINQ удобнее, модифицировать такой код удобнее.

Ты не напишешь на LINQ то, что можно написать на SQL, поэтому LINQ быть полной заменой SQL не может. Не неси чепуху.


Алексей ККакая моя постановка задачи неправильная? Ты о чём?

Вот такая: «Я пишу на LINQ, потому что на нём писать удобнее, чем на SQL, и модифицировать такой код удобнее».

Бред безумца. Даже не буду эти детские наивные глупости комментировать. Вроде уже не джуниор, а такое выдаёшь.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39309997
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КПотому что запросы писать на LINQ удобнее, модифицировать такой код удобнее.

Ты не напишешь на LINQ то, что можно написать на SQL, поэтому LINQ быть полной заменой SQL не может. Не неси чепуху.Ты не напишешь на SQL то, что можно написать на LINQ. И что?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310003
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt Зачем их индексировать в памяти?

Для быстрой обработки данных. Зачем еще данные индексируют? Для красоты?

hVosttКакая изначальная задача?
Изначальная? Мир во всем мире. )))
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310007
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КПотому что запросы писать на LINQ удобнее, модифицировать такой код удобнее.

Ты не напишешь на LINQ то, что можно написать на SQL, поэтому LINQ быть полной заменой SQL не может. Не неси чепуху.


Алексей ККакая моя постановка задачи неправильная? Ты о чём?

Вот такая: «Я пишу на LINQ, потому что на нём писать удобнее, чем на SQL, и модифицировать такой код удобнее».

Бред безумца. Даже не буду эти детские наивные глупости комментировать. Вроде уже не джуниор, а такое выдаёшь.

Перегибаешь, хвост. И сравнить можно что угодно с чем угодно, хватало бы "фантазии".

Нужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего.

Скажи нам - почему ТЫ выбираешь LINQ?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310011
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и не могу не заметить - порой то, что можно запросто сделат на LINQ - очень запарно делать на SQL.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310299
Gluck_13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueНужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего.

Скажи нам - почему ТЫ выбираешь LINQ?

И еще немаловажный момент - при рефакторинге структуры данных/объектной модели где проще найти зависимости - в строго типизированном коде LINQ или в текстах raw SQL?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310314
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueНужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего.
Конечно raw :) ИМХУ тут дело вкуса и цвета фломастеров. Лично мне SQL запросы проще писать, и отлаживать их проще в MMS, и тюнинговать проще. Как, например, посмотреть план выполнения linq-запроса?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310355
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMonochromatiqueНужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего.
Конечно raw :) ИМХУ тут дело вкуса и цвета фломастеров. Лично мне SQL запросы проще писать, и отлаживать их проще в MMS, и тюнинговать проще. Как, например, посмотреть план выполнения linq-запроса?

Зачем на него смотреть?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310374
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueDima Tпропущено...

Конечно raw :) ИМХУ тут дело вкуса и цвета фломастеров. Лично мне SQL запросы проще писать, и отлаживать их проще в MMS, и тюнинговать проще. Как, например, посмотреть план выполнения linq-запроса?

Зачем на него смотреть?
Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310380
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMonochromatiqueпропущено...


Зачем на него смотреть?
Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница.Но в итоге-то всё закончилось замечательно, LINQ завоевал своё место под солнцем. :-)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310383
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMonochromatiqueпропущено...


Зачем на него смотреть?
Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница.


Ммм.. Чем меньше возни со скулем - тем лучше. ИМХО, этому должно быть всё подчиненно.

Касаемо юзеров, которые привязаны и к адресам и к группам и еще черте-к-чему - то стоит потратить (вложить ресурс) время на структуру данных, чем потом на изучение планов запроса и прочее.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310387
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDima Tпропущено...

Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница.Но в итоге-то всё закончилось замечательно, LINQ завоевал своё место под солнцем. :-)
Я и не против LINQ, всеми руками за LINQ to Object, тем более что все отлично стыкуется .
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310409
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueМмм.. Чем меньше возни со скулем - тем лучше. ИМХО, этому должно быть всё подчиненно.
От возни никак ты не уйдешь. Те же индексы кто-то должен создать. Другой вопрос кто. Если это специально обученный DBA, это одно дело, а если ты сам себе DBA то в итоге тебе и возится.
MonochromatiqueКасаемо юзеров, которые привязаны и к адресам и к группам и еще черте-к-чему - то стоит потратить (вложить ресурс) время на структуру данных, чем потом на изучение планов запроса и прочее.
К сожалению не получится, структура подтянута из другой БД. В данном случае приходится жить с тем что есть.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310473
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique

Ммм.. Чем меньше возни со скулем - тем лучше. ИМХО, этому должно быть всё подчиненно.

Как например через linq такое сделать?
Код: sql
1.
2.
3.
FROM t po WITH (INDEX(IX_Gsm_sms_pdu_out_Request_command_id_request_time))
        INNER JOIN dbo.objects o 
        ON o.obj_id = po.sms_id


Т.е. сказать, используй специально созданный для это джойна фильтрованный индекс, от чего время исполнения уменьшается как минимум в 10000 раз?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310487
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВMonochromatique
Ммм.. Чем меньше возни со скулем - тем лучше. ИМХО, этому должно быть всё подчиненно.

Как например через linq такое сделать?
Код: sql
1.
2.
3.
FROM t po WITH (INDEX(IX_Gsm_sms_pdu_out_Request_command_id_request_time))
        INNER JOIN dbo.objects o 
        ON o.obj_id = po.sms_id


Т.е. сказать, используй специально созданный для это джойна фильтрованный индекс, от чего время исполнения уменьшается как минимум в 10000 раз?Такое можно сделать через view. Но использовать хинты приходится редко, это обычно следствие каких-нибудь проблем, которые лучше устранить, чем бороться со следствием.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310496
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТе же индексы кто-то должен создать.

EF их сама создает. Нужны какие-то еще? Наверное, можно создать, но лично у меня такой нужды не было.

Юзеров к адресам плохо привязывал наверное.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310536
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueEF их сама создает. Нужны какие-то еще? Наверное, можно создать, но лично у меня такой нужды не было.

Что можно насоздавать на автомате? По полям с ID разве что, чтобы ассоциации не тормозили. Но на этом жизнь не заканчивается. Есть не ключевые поля (даты документов, номера и т.д.), которые часто в условие отбора попадают, сомневаюсь что EF такие индексы создает.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310539
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMonochromatiqueEF их сама создает. Нужны какие-то еще? Наверное, можно создать, но лично у меня такой нужды не было.

Что можно насоздавать на автомате? По полям с ID разве что, чтобы ассоциации не тормозили. Но на этом жизнь не заканчивается. Есть не ключевые поля (даты документов, номера и т.д.), которые часто в условие отбора попадают, сомневаюсь что EF такие индексы создает.В миграциях вручную можно создавать любые индексы. Тот же DDL, вид сбоку.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310545
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Ну и вообще, никто не заставляет создавать БД с помощью EF. Как по мне, так методика code-first так себе. БД лучше создавать "обычными" средствами, потом по БД генерировать DbContext. Благо, при наличии T4 Text Template кодогенераторы пишутся за 5 минут. Да и готовых кодогенераторов хватает.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310554
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ миграциях вручную можно создавать любые индексы. Тот же DDL, вид сбоку.
Ключевое слово "вручную". Monochromatique ведь утверждает что EF настолько хорош что опускаться до особенностей работы SQL-сервера не надо, не надо заморачиваться что там за СУБД под твоей прогой, EF сам все порешает. А чтобы что-то сделать вручную - надо понимать что и для чего надо делать, т.е. знать особенности работы СУБД.
offtopПисал уже эту байку, повторюсь:
довелось мне сопровождать один сайт писаный на заказ, до меня работу приняли, по началу работало, а как стало выходить на рабочие объемы - стало жестко тупить.
Полез во внутря - ни одного индекса !!! Создал - сайт ожил, залетал.
Спросил разработчика (был доступен): "Как так?"
Получил шикарный ответ: "MySQL настолько крут что индексы не нужны!"

А тут слышу "EF настолько крут ..."
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310562
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлексей КВ миграциях вручную можно создавать любые индексы. Тот же DDL, вид сбоку.
Ключевое слово "вручную".Ну а тут без вариантов. Чудес не бывает, только вручную.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310563
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По теме топика: понимаю негодование ТС и понимаю откуда родилось требование LINQ наше всё. LINQ не дает стрелять в ногу, типизация не дает делать грубых ошибок, поэтому в одном большом проекте могут уживаться гуру и студенты, а на сегодня это важно, т.к. проекты большие, а гур мало и дорогие они. Тут вопрос больше в плоскости денег, что выходит за рамки данного форума, да и сайта тоже.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310565
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПо теме топика: понимаю негодование ТС и понимаю откуда родилось требование LINQ наше всё. LINQ не дает стрелять в ногу, типизация не дает делать грубых ошибок, поэтому в одном большом проекте могут уживаться гуру и студенты, а на сегодня это важно, т.к. проекты большие, а гур мало и дорогие они. Тут вопрос больше в плоскости денег, что выходит за рамки данного форума, да и сайта тоже.Наоборот. Наплодить рукописного SQL много ума не надо, это все умеют. Наладить разработку типизированных LINQ решений намного сложнее, но оно того стоит. У меня есть старые SQL-проекты, и новые LINQ-проекты, которые мы параллельно развиваем. Поверь, мне есть с чем сравнивать. :-)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310577
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНаоборот. Наплодить рукописного SQL много ума не надо, это все умеют.
С дуру ... сам знаешь. Хоть в SQL, хоть в LINQ. SQL он только с виду прост, хотя LINQtoSQL не читабельнее. Дело привычки.
Алексей КНаладить разработку типизированных LINQ решений намного сложнее, но оно того стоит. У меня есть старые SQL-проекты, и новые LINQ-проекты, которые мы параллельно развиваем. Поверь, мне есть с чем сравнивать. :-)
Я даже не сомневаюсь что тебе есть с чем сравнивать (ИМХУ ты себя неопытного сравниваешь с собой опытным). Сравни инструменты, тот мой топик, твоя фраза "Но я в этом смысла не вижу" 19667066 , ты интуитивно сравниваешь, а у меня есть численный критерий (время выполнения), чувствуешь разницу? Я могу пописать разные варианты одного и того же и посмотреть на фактический результат, а у тебя только один инструмент - интуиция.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310579
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТы не напишешь на SQL то, что можно написать на LINQ. И что?

Примерчики в студию!
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310580
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueДля быстрой обработки данных. Зачем еще данные индексируют? Для красоты?

Для работы с данными в памяти есть коллекции и словари. Зачем индексировать, ещё раз поинтересуюсь?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310581
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueПерегибаешь, хвост. И сравнить можно что угодно с чем угодно, хватало бы "фантазии".

Нужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего.

Скажи нам - почему ТЫ выбираешь LINQ?

Лет 5 наверное ещё пройдёт, прежде чем да некоторых дойдёт, что LINQ это не замена SQL.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310583
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T... а у тебя только один инструмент - интуиция.Ну а как. У меня же доступа к твоей БД нету, чтобы планы и статистику смотреть.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310584
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttMonochromatiqueДля быстрой обработки данных. Зачем еще данные индексируют? Для красоты?

Для работы с данными в памяти есть коллекции и словари. Зачем индексировать, ещё раз поинтересуюсь?
словари, т.е. Dictionary<> это и есть сортированные данные, но с оверрхэдом как по памяти так и по времени наполнения. Если данные статичны, то дешевле (по времени и памяти) залить из в массив и отсортировать.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310585
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КТы не напишешь на SQL то, что можно написать на LINQ. И что?

Примерчики в студию!Я не смотрю "Поле чудес".
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310586
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tсловари, т.е. Dictionary<> это и есть сортированные данные, но с оверрхэдом как по памяти так и по времени наполнения. Если данные статичны, то дешевле (по времени и памяти) залить из в массив и отсортировать.Dictionary<> это хэш-таблица.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310587
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDima T... а у тебя только один инструмент - интуиция.Ну а как. У меня же доступа к твоей БД нету, чтобы планы и статистику смотреть.
а как план в linq смотреть? Я уже спрашивал выше, никто не ответил. Без обид, я везде в спорных вопросах пишу ИМХУ, т.е. я так думаю, но других так делать не заставляю. Мой опыт - это мой опыт (Visual FoxPro много лет, никаких типов, сплошной raw SQL)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310589
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлексей Кпропущено...
Ну а как. У меня же доступа к твоей БД нету, чтобы планы и статистику смотреть.
а как план в linq смотреть?Как посмотреть план выполнения SQL-запроса, сгенерированного LINQ? Берём "профайлером" и смотрим, ты же как-то смотрел. Или я не понял вопроса.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310590
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDima Tсловари, т.е. Dictionary<> это и есть сортированные данные, но с оверрхэдом как по памяти так и по времени наполнения. Если данные статичны, то дешевле (по времени и памяти) залить из в массив и отсортировать.Dictionary<> это хэш-таблица.
Возможно, но работа с массивами быстрее если они влазят в кэш проца.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310591
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TБез обид, я везде в спорных вопросах пишу ИМХУ, т.е. я так думаю, но других так делать не заставляю. Мой опыт - это мой опыт (Visual FoxPro много лет, никаких типов, сплошной raw SQL)Зачем мне кого-то тут заставлять? Просто делюсь своим мнением, не более того. Просто не согласен с некоторыми высказываниями, о чём и сообщил.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310593
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueСкажи нам - почему ТЫ выбираешь LINQ?

Ну вот пример есть, кстати, хороший. Есть у нас проект, где используется параллельно сразу основных 4 базы данных: MS SQL для мета-данных и истории (CQRS), другой MS SQL с read-only генерируемой нормализованной базой для отчётов, MongoDb для хранения кеша бизнес-данных и Lucene для поиска.

К бизнес-данным и мета-информации есть доступ с помощью LINQ через слой доменной абстракции (как часть DSL). Единый доступ. Профит от генерации SQL в данном случае составляет лишь 20-30% от силы. Основная мощь в построении слоя бизнес-абстракции. Любое изменение это история. Мы уже обкатывали так называемые путешествия в прошлое, например, можно открыть и посмотреть состояние системы в режиме чтения на определенную дату и время. Можно откатывать отдельные транзакции. Все формочки генерятся. Бизнес-логика пишется вообще на Lua.

Профит от LINQ тут колоссальный, так как на нём сидят все прикладные запросы к данным и он протаскивается даже внутрь бизнес-скриптов (политики безопасности, бизнес-валидация, бизнес-события, бизнес-логика). Ну а те, кто видят в LINQ лишь способ спрятаться от написания SQL, то это фейл, что ещё могу сказать.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310594
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлексей Кпропущено...
Dictionary<> это хэш-таблица.
Возможно..."К гадалке не ходи" (ц) :-)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310595
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tсловари, т.е. Dictionary<> это и есть сортированные данные, но с оверрхэдом как по памяти так и по времени наполнения. Если данные статичны, то дешевле (по времени и памяти) залить из в массив и отсортировать.

С какого ляда это они сортированные? Оверхед по сравнению с данными минимален. Для небольших коллекций конечно эффективней остортировать коллекцию, но это вообще фигня, а не оптимизация.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310596
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ не смотрю "Поле чудес".

Слив засчитан. В чём смысл говорить то, что ты даже подтвердить не в силах? Кто б знал..
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310598
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T а как план в linq смотреть?

Там нет плана
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310601
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КЯ не смотрю "Поле чудес".

Слив засчитан.Кем?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310603
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDima Tпропущено...

Возможно..."К гадалке не ходи" (ц) :-)
а дальше прочитал что я писал? Тут топик где я just for fun развлекался, и уменьшение буфера до размеров кэша проца дало ускорение почти вдвое.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310604
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей ККем?

Дурачка включаешь? На работе наверное прокатывает?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310608
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttС какого ляда это они сортированные? Оверхед по сравнению с данными минимален. Для небольших коллекций конечно эффективней остортировать коллекцию, но это вообще фигня, а не оптимизация.
Небольших это сколько? Я поражаюсь на клев на О(1), посчитать хэш это бесплатно чтоли? Хэш таблица места не занимает? Жертвы маркетологов.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310617
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt1. Кривая структура БД, изначально не подходящая для задач, решаемых LINQ

БД, особенно 10-15 лет назад, ничего не знали про LINQ. и как-то живут, по своим реляционным правилам. а БД, как и все в этом мире (2-й закон термодинамики неумолим), со временем тоже не молодеют, целлюлитом обрастают, или, даже, болеют. но живут.

проектирование БД под ОРМ - это зло.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310619
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КТы не напишешь на SQL то, что можно написать на LINQ. И что?

Примерчики в студию!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SELECT  Id,
                         Name,
                         Note,
                         URL,
                         DateInsert,
                         DateUpdate,
                         STUFF((SELECT ', ' + a.CategoryName
                                 FROM (SELECT d.Id,
                                 d.Name,
                                 d.Note,
                                 d.URL,
                                 d.DateInsert,
                                 d.DateUpdate,
                                 c.Name as CategoryName
                            FROM SomeData as d
                            LEFT OUTER JOIN SomeData_Category AS dc
                              ON dc.SomeDataId = d.Id
                            LEFT OUTER JOIN Category as c
                              ON dc.CategoryId = c.Id) a
                                WHERE b.Id = a.Id 
                                  FOR XML PATH('')),
                               1,
                               1,
                               '') CategoryNames
                    FROM (SELECT d.Id,
                                 d.Name,
                                 d.Note,
                                 d.URL,
                                 d.DateInsert,
                                 d.DateUpdate,
                                 c.Name as CategoryName
                            FROM SomeData as d
                            LEFT OUTER JOIN SomeData_Category AS dc
                              ON dc.SomeDataId = d.Id
                            LEFT OUTER JOIN Category as c
                              ON dc.CategoryId = c.Id) b
                   GROUP BY Id, Name, Note, URL, DateInsert, DateUpdate
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310623
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDima T,

Ну и вообще, никто не заставляет создавать БД с помощью EF. Как по мне, так методика code-first так себе . БД лучше создавать "обычными" средствами, потом по БД генерировать DbContext. Благо, при наличии T4 Text Template кодогенераторы пишутся за 5 минут. Да и готовых кодогенераторов хватает.

зависит от масштаба. для мелких систем - пойдет (хотя там столько гемороя, что даже там - ну его)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310624
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПо теме топика: понимаю негодование ТС и понимаю откуда родилось требование LINQ наше всё. LINQ не дает стрелять в ногу, типизация не дает делать грубых ошибок, поэтому в одном большом проекте могут уживаться гуру и студенты, а на сегодня это важно, т.к. проекты большие, а гур мало и дорогие они. Тут вопрос больше в плоскости денег, что выходит за рамки данного форума, да и сайта тоже.

фигня какая-то: что, студенты уже SQL не знают? да наоборот, гораздо сложнее включить мозги в ОРМ, так как ОРМ не отменяет SQL, а делает взгляд на него более критичным с точки зрения "объектности"
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310643
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлексей Кпропущено...
"К гадалке не ходи" (ц) :-)
а дальше прочитал что я писал? Тут топик где я just for fun развлекался, и уменьшение буфера до размеров кэша проца дало ускорение почти вдвое.Это замечательно, но это не делает Dictionary<> сортированным списком. Впрочем, если хочешь, чтобы это было так, то пусть будет так. :-)
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310647
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueНу и не могу не заметить - порой то, что можно запросто сделат на LINQ - очень запарно делать на SQL.

если речь и дет о запросе реляционных данных, то SQL тут еще пока никто не обогнал ни в простоте, ни в эффективности
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310649
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpАлексей КDima T,

Ну и вообще, никто не заставляет создавать БД с помощью EF. Как по мне, так методика code-first так себе . БД лучше создавать "обычными" средствами, потом по БД генерировать DbContext. Благо, при наличии T4 Text Template кодогенераторы пишутся за 5 минут. Да и готовых кодогенераторов хватает.

зависит от масштаба. для мелких систем - пойдет (хотя там столько гемороя, что даже там - ну его)Не понял, что не так с кодогенератором?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310650
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpMonochromatiqueНу и не могу не заметить - порой то, что можно запросто сделат на LINQ - очень запарно делать на SQL.

если речь и дет о запросе реляционных данных, то SQL тут еще пока никто не обогнал ни в простоте, ни в эффективностиНапример, в SQL нет аналога ассоциаций.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310655
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кfsharp_fsharpпропущено...


если речь и дет о запросе реляционных данных, то SQL тут еще пока никто не обогнал ни в простоте, ни в эффективностиНапример, в SQL нет аналога ассоциаций.

а чем PK - FK не ассоциация?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310656
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кfsharp_fsharpпропущено...


зависит от масштаба. для мелких систем - пойдет (хотя там столько гемороя, что даже там - ну его)Не понял, что не так с кодогенератором?

я не на этом сделал акцент. а на том, что "методика code-first так себе" - с этим согласен. а все эти кодогенераторы, особенно на легаси БД...
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310657
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharphVosttпропущено...


Примерчики в студию!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SELECT  Id,
                         Name,
                         Note,
                         URL,
                         DateInsert,
                         DateUpdate,
                         STUFF((SELECT ', ' + a.CategoryName
                                 FROM (SELECT d.Id,
                                 d.Name,
                                 d.Note,
                                 d.URL,
                                 d.DateInsert,
                                 d.DateUpdate,
                                 c.Name as CategoryName
                            FROM SomeData as d
                            LEFT OUTER JOIN SomeData_Category AS dc
                              ON dc.SomeDataId = d.Id
                            LEFT OUTER JOIN Category as c
                              ON dc.CategoryId = c.Id) a
                                WHERE b.Id = a.Id 
                                  FOR XML PATH('')),
                               1,
                               1,
                               '') CategoryNames
                    FROM (SELECT d.Id,
                                 d.Name,
                                 d.Note,
                                 d.URL,
                                 d.DateInsert,
                                 d.DateUpdate,
                                 c.Name as CategoryName
                            FROM SomeData as d
                            LEFT OUTER JOIN SomeData_Category AS dc
                              ON dc.SomeDataId = d.Id
                            LEFT OUTER JOIN Category as c
                              ON dc.CategoryId = c.Id) b
                   GROUP BY Id, Name, Note, URL, DateInsert, DateUpdate



в оракле короче это пишется при помощи LISTAGG
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310658
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T Monochromatique ведь утверждает что EF настолько хорош что опускаться до особенностей работы SQL-сервера не надо, не надо заморачиваться что там за СУБД под твоей прогой, EF сам все порешает.

Слушай, Дима Тэ, это же у тебя там что-то с линком не срастается; нравится писать селекты в блокноте - так вперед. Не знаю, где ты находишься в пищевой цепочке разработки, но лично я бы решение на прямых запросах не заказал.

Я думаю, такими же положениями руководствуются утырки из 1С, которые генерят текст запроса в рантайме - А-ЧО-ТАКОВА?

Каждому свое. Я прямыми запросами еще в JDBC наелся - рефакторинг - сказка. Знаешь такое слово? ))))
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310659
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я про то, что в LINQ это сделать нельзя, и еще масса полезных "классических" запросов, которые LINQ не осилит. тут только мапить DTO на SQL
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310660
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpMonochromatiqueНу и не могу не заметить - порой то, что можно запросто сделат на LINQ - очень запарно делать на SQL.

если речь и дет о запросе реляционных данных, то SQL тут еще пока никто не обогнал ни в простоте, ни в эффективности

Выбрать top 10 контрагентов по продажам за месяц и выбрать у каждого самый крупный, но не максимальный заказ. Второй по сумме, в общем.

На LINQ одна строчка. На SQL?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310663
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttMonochromatiqueПерегибаешь, хвост. И сравнить можно что угодно с чем угодно, хватало бы "фантазии".

Нужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего.

Скажи нам - почему ТЫ выбираешь LINQ?

Лет 5 наверное ещё пройдёт, прежде чем да некоторых дойдёт, что LINQ это не замена SQL.

Сколько лет должно пройти, чтобы ты забил в яндекс - как расшифровывается "LINQ"? Ты сам то, знаешь что это такое?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310693
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TLINQ не дает стрелять в ногу, типизация не дает делать грубых ошибок, поэтому в одном большом проекте могут уживаться гуру и студенты, а на сегодня это важно, т.к. проекты большие, а гур мало и дорогие они.

Это строчки из резюме? ))))
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310760
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpАлексей Кпропущено...
Например, в SQL нет аналога ассоциаций.

а чем PK - FK не ассоциация?PK и FK это constraint. Аналог ассоциации это join.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310767
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpя про то, что в LINQ это сделать нельзя, и еще масса полезных "классических" запросов, которые LINQ не осилит. тут только мапить DTO на SQLНу давай перечислим случаи, когда из-за ограниченных возможностей LINQ фрагмент запроса придётся разместить во view:

1. Рекурсивный запрос.
2. Необходимость использования хинтов.
3.......

Можешь продолжить?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310779
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Для начала необходимо понять, что LINQ это не альтернатива SQL, никогда ей не была, и вовсе не задумывалось таковой. Поэтому сравнивать SQL vs LINQ — вообще не корректно, в принципе. Это как сравнивать пилу с молотком.


Не как пилу с молотком, но как цепную бензопилу и циркульную электропилу -- вполне можно.
И то, и другое служит для одних и тех же целей. Можно сделать с помощью одного, можно с помощью другого.
Встроенные (embedded) запросы были очень давно, и всегда их сравнивали с невстроенными.

Так что всё правомерно.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310794
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если таблиц немного, база весит меньше пол-терабайта, то может строить запросы через linq или orm какую или еще что, прокатит.
Но по собственному опыту те запросы которые генерятся orm-ками для таблиц по 60млрд строк настолько неоптимальные, что оптимизатор mssql (например) просто выпадает в осадок...
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310820
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteЕсли таблиц немного, база весит меньше пол-терабайта, то может строить запросы через linq или orm какую или еще что, прокатит.
Но по собственному опыту те запросы которые генерятся orm-ками для таблиц по 60млрд строк настолько неоптимальные, что оптимизатор mssql (например) просто выпадает в осадок...И какой вывод нужно сделать из прочитанного? В MSSQL плохой оптимизатор? Есть программисты, не умеющие работать с ОРМ? ОРМ формирует разные запросы для таблиц с менее и более 60 млрд записей?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310840
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КX-CiteЕсли таблиц немного, база весит меньше пол-терабайта, то может строить запросы через linq или orm какую или еще что, прокатит.
Но по собственному опыту те запросы которые генерятся orm-ками для таблиц по 60млрд строк настолько неоптимальные, что оптимизатор mssql (например) просто выпадает в осадок...И какой вывод нужно сделать из прочитанного? В MSSQL плохой оптимизатор? Есть программисты, не умеющие работать с ОРМ? ОРМ формирует разные запросы для таблиц с менее и более 60 млрд записей?


Вывод простой - оптимизатор MS SQL может "выпасть в осадок" и некто X-Cite это неоднократно наблюдал.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310872
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueНе знаю, где ты находишься в пищевой цепочке разработки
Работодатель.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310876
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кfsharp_fsharpпропущено...


если речь и дет о запросе реляционных данных, то SQL тут еще пока никто не обогнал ни в простоте, ни в эффективностиНапример, в SQL нет аналога ассоциаций.
В синтаксисе нет. SQL не ООП, потому и нет. Есть join в него и транслируются ассоциации.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310877
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кfsharp_fsharpя про то, что в LINQ это сделать нельзя, и еще масса полезных "классических" запросов, которые LINQ не осилит. тут только мапить DTO на SQLНу давай перечислим случаи, когда из-за ограниченных возможностей LINQ фрагмент запроса придётся разместить во view:

1. Рекурсивный запрос.
2. Необходимость использования хинтов.
3.......

Можешь продолжить?
Зачем надо костыль со view? А на кой нужен view если можно без view написать raw select?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310878
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлексей Кпропущено...
Ну давай перечислим случаи, когда из-за ограниченных возможностей LINQ фрагмент запроса придётся разместить во view:

1. Рекурсивный запрос.
2. Необходимость использования хинтов.
3.......

Можешь продолжить?
Зачем надо костыль со view? А на кой нужен view если можно без view написать raw select?

часто, даже, и view не написать - where либо не получится из вне повесить, или это будет очень не оптимально.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310881
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлексей Кпропущено...
Ну давай перечислим случаи, когда из-за ограниченных возможностей LINQ фрагмент запроса придётся разместить во view:

1. Рекурсивный запрос.
2. Необходимость использования хинтов.
3.......

Можешь продолжить?
Зачем надо костыль со view? А на кой нужен view если можно без view написать raw select?С view linq может работать как с обычной таблицей.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310882
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpDima Tпропущено...

Зачем надо костыль со view? А на кой нужен view если можно без view написать raw select?

часто, даже, и view не написать - where либо не получится из вне повесить, или это будет очень не оптимально. Список сможешь продолжить?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310883
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кfsharp_fsharpпропущено...


часто, даже, и view не написать - where либо не получится из вне повесить, или это будет очень не оптимально. Список сможешь продолжить?

я же про то что и вью не спасет. так что не в тот мне список
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310884
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpАлексей Кпропущено...
Список сможешь продолжить?

я же про то что и вью не спасет. так что не в тот мне список

если это не мат вью
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310887
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpАлексей Кпропущено...
Список сможешь продолжить?

я же про то что и вью не спасет. так что не в тот мне списокНу тогда рассказывай, почему where на view из вне не получится повесить. Всегда получалось.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310889
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кfsharp_fsharpпропущено...


я же про то что и вью не спасет. так что не в тот мне списокНу тогда рассказывай, почему where на view из вне не получится повесить. Всегда получалось.


потому что куча параметров может быть внурти запроса
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310893
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpАлексей Кпропущено...
Ну тогда рассказывай, почему where на view из вне не получится повесить. Всегда получалось.


потому что куча параметров может быть внурти запросаНе тот случай. Во view вынесен маленький фрагмент запроса, который невозможно написать на linq. Чего-то большого и сложного в этой view по определению быть не может. Поэтому не надо проецировать на обсуждаемую view все свои воспоминания, связанные с огромными sql запросами.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310894
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кfsharp_fsharpпропущено...



потому что куча параметров может быть внурти запросаНе тот случай. Во view вынесен маленький фрагмент запроса, который невозможно написать на linq. Чего-то большого и сложного в этой view по определению быть не может . Поэтому не надо проецировать на обсуждаемую view все свои воспоминания, связанные с огромными sql запросами.

ну конечно, прямо по-определению. с запросами с параметрами не приходилось работать?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310895
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpАлексей Кпропущено...
Не тот случай. Во view вынесен маленький фрагмент запроса, который невозможно написать на linq. Чего-то большого и сложного в этой view по определению быть не может . Поэтому не надо проецировать на обсуждаемую view все свои воспоминания, связанные с огромными sql запросами.

ну конечно, прямо по-определению. с запросами с параметрами не приходилось работать?Например, во view вынесена рекурсивная часть запроса. Накой тут какие-то параметры? Да и какие параметры могут быть у view? Это же не inline-функция.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310903
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMonochromatiqueНе знаю, где ты находишься в пищевой цепочке разработки
Работодатель.

А чего тогда споришь?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310941
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpБД, особенно 10-15 лет назад, ничего не знали про LINQ. и как-то живут, по своим реляционным правилам. а БД, как и все в этом мире (2-й закон термодинамики неумолим), со временем тоже не молодеют, целлюлитом обрастают, или, даже, болеют. но живут.

Ты оголтелую хрень какую-то несёшь. Когда-то и баз данных вообще не было, и калькуляторов не было. Гремели деревянными счётами и жили себе спокойно.

fsharp_fsharpпроектирование БД под ОРМ - это зло.

Я сомневаюсь, что ты свою глупую мантру сможешь пояснить, поэтому даже просить аргументировать этот бред не буду.

Скажу только одно. Один из симптомов SQL головного мозга -- это когда человек вообще забывает для чего базы данных были придуманы. А придуманы они были хранить данные так, чтобы с ними было удобно работать. Если архитектура приложения, используемые ORM, задачи бизнеса в конце концов накладывают свои требования к проектированию БД для удобство выполнения задач и достижения конечной цели, а некий типа крутой БД архитектор встаёт раком со своими принципами, то он в этой же позе покидает команду и шурует в поисках такого же упоротого стада.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310942
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharphVosttпропущено...


Примерчики в студию!

fsharp_fsharp
Код: sql
1.
2.
3.
4.
SELECT  Id,
                         Name,
                         Note,
                         URL,



Ты хоть понял, о чём идёт речь?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39310943
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueСколько лет должно пройти, чтобы ты забил в яндекс - как расшифровывается "LINQ"? Ты сам то, знаешь что это такое?

Ну просвяти уж, раз начал.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311061
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О чем спор? Непонятно. Можно гвозди забивать микроскопом? - можно. Вопрос "нужно ли?" ушел из области спора. Опять же ушел в плоскость денег: что дороже - специалист, умеющий забивать гвозди без микроскопа или сверхпрочный микроскоп?
В разных ситуациях по разному, чаще оказывается дешевле сверхпрочный микроскоп, т.е. усиление железа под возрастающие потребности.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311103
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T О чем спор? Непонятно. Можно гвозди забивать микроскопом? - можно. Вопрос "нужно ли?" ушел из области спора. Опять же ушел в плоскость денег: что дороже - специалист, умеющий забивать гвозди без микроскопа или сверхпрочный микроскоп?
В разных ситуациях по разному, чаще оказывается дешевле сверхпрочный микроскоп, т.е. усиление железа под возрастающие потребности.Но точно не о микроскопах.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311104
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей ККем?

Дурачка включаешь?Да. Потому что не понимаю, пример чего ты ожидаешь увидеть. В LINQ и SQL есть как уникальные возможности, так и общие. Это и без примеров понятно.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311299
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttfsharp_fsharpБД, особенно 10-15 лет назад, ничего не знали про LINQ. и как-то живут, по своим реляционным правилам. а БД, как и все в этом мире (2-й закон термодинамики неумолим), со временем тоже не молодеют, целлюлитом обрастают, или, даже, болеют. но живут.

Ты оголтелую хрень какую-то несёшь. Когда-то и баз данных вообще не было, и калькуляторов не было. Гремели деревянными счётами и жили себе спокойно.

fsharp_fsharpпроектирование БД под ОРМ - это зло.

Я сомневаюсь, что ты свою глупую мантру сможешь пояснить, поэтому даже просить аргументировать этот бред не буду.

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

1. с БД может работать не один клиент
2. ОРМ - это всегда локализованная задача для клиента - он вырывает из БД только то, что надо приложению. а БД - там еще много других задач.
3. наезд на "типа крутой БД архитектор" может оправдываться только если ты сам "типа крутой БД архитектор". по твоим постам - это не так:

"С другой стороны на SQL можно написать ТАКОЕ, что в LINQ сделать почти не реально... вот только надо понимать, такие запросы изначально нафиг не нужны были в LINQ, а если пристально присмотреться, то скорее всего необходимость таких адских запросов — это большой косяк в разработке. Но то такое..."
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311394
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КX-CiteЕсли таблиц немного, база весит меньше пол-терабайта, то может строить запросы через linq или orm какую или еще что, прокатит.
Но по собственному опыту те запросы которые генерятся orm-ками для таблиц по 60млрд строк настолько неоптимальные, что оптимизатор mssql (например) просто выпадает в осадок...И какой вывод нужно сделать из прочитанного? В MSSQL плохой оптимизатор? Есть программисты, не умеющие работать с ОРМ? ОРМ формирует разные запросы для таблиц с менее и более 60 млрд записей?
Я имел ввиду, что те запросы которые она генерирует, особенно сложные, настолько сложны при чтении их на sql, что не только человек, не может разобрать что там выбирается (без рефакторинга), но и сам оптимизатор строит далеко не оптимальные планы.
Для многомиллионных таблиц, не оптимальный план грозит долгой выборкой.
На небольших таблицах, там все равно как данные выбирались.
Важно использовать то, что подходит под конкретную цель.
Если быстрая разработка с одинарными инструкциями (актуальными для OLTP баз), то linq или что там, подойдет вполне.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311414
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteАлексей Кпропущено...
И какой вывод нужно сделать из прочитанного? В MSSQL плохой оптимизатор? Есть программисты, не умеющие работать с ОРМ? ОРМ формирует разные запросы для таблиц с менее и более 60 млрд записей?
Я имел ввиду, что те запросы которые она генерирует, особенно сложные, настолько сложны при чтении их на sql, что не только человек, не может разобрать что там выбирается (без рефакторинга), но и сам оптимизатор строит далеко не оптимальные планы.
Для многомиллионных таблиц, не оптимальный план грозит долгой выборкой.
На небольших таблицах, там все равно как данные выбирались.
Важно использовать то, что подходит под конкретную цель.
Если быстрая разработка с одинарными инструкциями (актуальными для OLTP баз), то linq или что там, подойдет вполне.Что мешает строить LINQ запрос таким образом, чтобы на выходе получился нужный SQL запрос?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311481
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и что вы прикопались к linq and orm каждый танцует как умеет ( научен) я когда увидел в передпоследней конторе
как пишут код без орм (~ 100 таблиц) и ооп все в лесенку одной простыней, тоже сначала прихуел, потом ничо, показал,
объяснил - начали жрать орм аш за ушами трещало.
linq такая зверь что если не хватает функционала его можно накручивать как в меньшую сторону так и в большую
если не нравится как он формирует запросы делайте свой обходчик - паттерн - визитер, если ваще не нравится
ковыряйтесь в навозе индексах, на любителя
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311523
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЧто мешает строить LINQ запрос таким образом, чтобы на выходе получился нужный SQL запрос?
Смысл? Если знаешь какой должен быть SQL запрос, то зачем тратить время на подгонку LINQ запроса под результат?
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311600
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлексей КЧто мешает строить LINQ запрос таким образом, чтобы на выходе получился нужный SQL запрос?
Смысл? Если знаешь какой должен быть SQL запрос, то зачем тратить время на подгонку LINQ запроса под результат?Ну если ты сам не можешь ответить на этот вопрос, то тогда да, для тебя смысла использовать LINQ2SQL нет.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311601
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDima Tпропущено...

Смысл? Если знаешь какой должен быть SQL запрос, то зачем тратить время на подгонку LINQ запроса под результат?Ну если ты сам не можешь ответить на этот вопрос, то тогда да, для тебя смысла использовать LINQ2SQL нет.

я например, использую NHibernate. Но желания противоставления его SQL у меня как-то не возникало. И с тезисом "Смысл? Если знаешь какой должен быть SQL запрос, то зачем тратить время на подгонку LINQ запроса под результат?" полностью согласен.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311604
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpАлексей Кпропущено...
Ну если ты сам не можешь ответить на этот вопрос, то тогда да, для тебя смысла использовать LINQ2SQL нет.

я например, использую NHibernate. Но желания противоставления его SQL у меня как-то не возникало. И с тезисом "Смысл? Если знаешь какой должен быть SQL запрос, то зачем тратить время на подгонку LINQ запроса под результат?" полностью согласен.Рад, что ты нашёл единомышленника. Не понимаю, почему типизация при работе с данными для вас ничего не значит. Впрочем, моё какое дело.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39311663
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpЕсли знаешь какой должен быть SQL запрос, то зачем тратить время на подгонку LINQ запроса под результат?" .
Это время окупится при отладке и рефакторинге.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39312113
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteЯ имел ввиду, что те запросы которые она генерирует, особенно сложные, настолько сложны при чтении их на sql, что не только человек, не может разобрать что там выбирается (без рефакторинга), но и сам оптимизатор строит далеко не оптимальные планы.
Для многомиллионных таблиц, не оптимальный план грозит долгой выборкой.
На небольших таблицах, там все равно как данные выбирались.
Важно использовать то, что подходит под конкретную цель.
Если быстрая разработка с одинарными инструкциями (актуальными для OLTP баз), то linq или что там, подойдет вполне.
Так же есть запросы, которые генерирует программист, особенно сложные, настолько сложны при чтении их на sql, что не только человек, не может разобрать что там выбирается (без рефакторинга), но и сам оптимизатор строит далеко не оптимальные планы.
Для многомиллионных таблиц, не оптимальный план грозит долгой выборкой.
На небольших таблицах, там все равно как данные выбирались.
Важно использовать то, что подходит под конкретную цель.
Если быстрая разработка с одинарными инструкциями (актуальными для OLTP баз), то linq или что там, подойдет вполне.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39312138
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТакое можно сделать через view. Но использовать хинты приходится редко, это обычно следствие каких-нибудь проблем, которые лучше устранить, чем бороться со следствием.
Ну или ХП. Просто БД ведет начала ваяться на SQL Server 6.0 и теперь очень старая и очень большая, используется в 100500 различных подсистемах.
Хотя все равно не понятно, почему оптимизатор не использует специально созданный для join индекс без явного указания.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39312168
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВТак же есть запросы, которые генерирует программист, особенно сложные, настолько сложны при чтении их на sql, что не только человек, не может разобрать что там выбирается (без рефакторинга), но и сам оптимизатор строит далеко не оптимальные планы.
Есть такое. Причем оптимизатор начинает тупить раньше чем пропадает понимание при чтении запроса. Конкретный пример: запрос 20-30 строк, с подвывертами, но читаемый, выполнялся почти минуту. Вынес один подзапрос во временную таблицу и залетало, меньше секунды. В чистом виде затупление оптимизатора, как понимаю он пытался запрос с подзапросами скомбинировать в единый план и не смог.
ЕвгенийВХотя все равно не понятно, почему оптимизатор не использует специально созданный для join индекс без явного указания.
Может статистики отключены или еще чего. Это лучше в форуме по MSSQL спросить. Использование хинтов - последнее дело, т.к. по началу они помогают, а в какой-то момент могут наоборот тормоза начать создавать.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39312343
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей КТакое можно сделать через view. Но использовать хинты приходится редко, это обычно следствие каких-нибудь проблем, которые лучше устранить, чем бороться со следствием.
Ну или ХП. Просто БД ведет начала ваяться на SQL Server 6.0 и теперь очень старая и очень большая, используется в 100500 различных подсистемах.Я предложил view, потому что LINQ с view может работать как с обычной таблицей. В данном случае view сделать примерно таким, больше в него ничего не помещать:
Код: sql
1.
2.
create view T1ByF1 as
select * from T1 with(index(IX_T1_F1))


ЕвгенийВХотя все равно не понятно, почему оптимизатор не использует специально созданный для join индекс без явного указания.Ну всякое бывает, но как правило анализ ситуации показывает, что у оптимизатора есть причины выбрать выбранный план выполнения. Во всяком случае я для себя решил, что использование хинтов, это временное решение, требующее дальнейшего разбирательства.

зы: Ну а если система содержит большую часть логики в хранимых процедурах, то и нет смысла использовать LINQ в такой системе.
...
Рейтинг: 0 / 0
135 сообщений из 135, показаны все 6 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сложные SQL запросы на языке LINQ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]