powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сложные SQL запросы на языке LINQ
25 сообщений из 135, страница 2 из 6
Сложные 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
25 сообщений из 135, страница 2 из 6
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сложные SQL запросы на языке LINQ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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