|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttИ в 90% если сесть и хорошенько подумать, то задача удивительным образом декомпозируется и теряет свою «реляционную» привязанность . Зачастую, я уже неоднократно с этим сталкивался, проблема кроется в «реляционном» мышлении Объектное "мышление" 1. get(id) 2. save(entity) 3. delete(id/entity) "Реляционное" 4. (камень преткновения) - getList разница м/ду 1,2,3 и 4 - очевидна: "объект" vs "отношение". в простых случаях можно сделать равно между "список объектов" и "отношение". но это как "линейное уравнение частный случай не линейного". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 18:10 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttLINQ-style: ведение параллельно в БД отдельной плоской структуры всех необходимых данных, к которой осуществляется простой доступ как к коллекции. Да, избыточно. Да, слегка снижается скорость прямой записи/изменений (это если не делать отложенную очередь). Но, крайне эффективные молниеносные выборки, быстрее, чем SQL-style, местами на порядки. Очень понятно для сопровождения, поддаётся контролю и полному тестированию. Не зависит от природы СУБД. БД - она, как правило уже есть, и она - не в зоне разработчика. и она может быть древним говном мамонта. и приложения должны уметь с ним работать, и умеют они с ними работать. а вот то, как ты предлагаешь надругаться над БД... наверное деньги тебя ослепили ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 18:19 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueЕвгенийВВсе зависит от уровня подготовки. Что делает этот запрос? Написано человеком. Код: sql 1.
ИМХУ Этот запрос занимается изнасилованием сервера. Сервер БД должен хранить, читать и писать с поддержанием целостности БД. Всё. Что-то считать он не должен (как тут какой-то парсинг строк), т.к. это делается в ущерб всем остальным юзерам, использующим БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 19:01 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
sheichа тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными идея сама по себе странная но подход у нынешнего работодателя такой( все таки, каждая часть системы должна заниматься своей работой. и за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы Рано или поздно наступят на грабли потери производительности. БД это узкое место любой централизованной системы, начнет тупить из-за блокировок и хоть запокупайся новых железяк, не параллелятся блокировки в БД, все-равно будет висеть и тормозить. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 19:12 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Dima TMonochromatiqueпропущено... Что делает этот запрос? Написано человеком. Код: sql 1.
ИМХУ Этот запрос занимается изнасилованием сервера. Сервер БД должен хранить, читать и писать с поддержанием целостности БД. Всё. Что-то считать он не должен (как тут какой-то парсинг строк), т.к. это делается в ущерб всем остальным юзерам, использующим БД. ничего смертельного с сервером не произойдет. если вдруг затупит на этом месте, тут другая будет причина, но не строковые ф-ии ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 19:15 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
fsharp_fsharpsheichпропущено... не показательный пример запрос не производит сложной выборки данных, а занимается уже обработкой представления данных а это, имхо, уже задача не SQL как раз в целом, да. но иногда, особенно, когда это представление зависит не только от текущей записи, а еще от других, лучше, все же, SQL (конечно, если это полноценная СУБД, типа ORACLE или SQL SERVER)В LINQ так же есть вложенные запросы, которые прекрасно транслируются во вложенные запросы SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 04:15 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttАлексей КПравильно, если планируем применять LINQ для генерации SQL. Так почему бы тогда сразу не писать SQL?Потому что запросы писать на LINQ удобнее, модифицировать такой код удобнее. hVosttПравильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.Какая моя постановка задачи неправильная? Ты о чём? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 04:18 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Если я пишу запрос на SQL я всегда могу использовать все преимущества индексирования, расширенных возможностей T-SQL или PL/SQL и добиться максимальной скорости / адекватности запроса. Если LINQ "за меня" сама генерит SQL, то одному Богу известно, какие именно запросы она строчит и шлет в БД... Вот в чем засада. В отстствии контроля. Это - черный ящик. Я тут случайно вместо того, что бы запринтовать в лог значения полей коллекции вывел SQL-запросы, которые генерит LINQ для получения поля этой коллекции и ужаснулся... И понял, почему LINQ так тормозит. Вобщем, я не вижу какого-то адекватного, простого использования LINQ в случае работы с большими массивами данных в БД. ОК, она пишет за меня SQL и вытянуте данные переводит во временные (в памяти) коллекции. Потом, видимо я должен оперировать уже коллекциями. Но они же, вот, не могут быть проиндексированы, например, в отличие от таблиц?... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 14:17 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
sheichНо они же, вот, не могут быть проиндексированы, например, в отличие от таблиц?... Коллекции бывают разными ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 22:37 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
sheich... и ужаснулся... И понял, почему LINQ так тормозит.... и возрадовался дух Мой о Боге Спасителе Моем. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 04:36 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
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 — уже по сути неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 07:06 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Алексей КПотому что запросы писать на LINQ удобнее, модифицировать такой код удобнее. Ты не напишешь на LINQ то, что можно написать на SQL, поэтому LINQ быть полной заменой SQL не может. Не неси чепуху. Алексей ККакая моя постановка задачи неправильная? Ты о чём? Вот такая: «Я пишу на LINQ, потому что на нём писать удобнее, чем на SQL, и модифицировать такой код удобнее». Бред безумца. Даже не буду эти детские наивные глупости комментировать. Вроде уже не джуниор, а такое выдаёшь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 07:09 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttАлексей КПотому что запросы писать на LINQ удобнее, модифицировать такой код удобнее. Ты не напишешь на LINQ то, что можно написать на SQL, поэтому LINQ быть полной заменой SQL не может. Не неси чепуху.Ты не напишешь на SQL то, что можно написать на LINQ. И что? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 08:06 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVostt Зачем их индексировать в памяти? Для быстрой обработки данных. Зачем еще данные индексируют? Для красоты? hVosttКакая изначальная задача? Изначальная? Мир во всем мире. ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 08:23 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttАлексей КПотому что запросы писать на LINQ удобнее, модифицировать такой код удобнее. Ты не напишешь на LINQ то, что можно написать на SQL, поэтому LINQ быть полной заменой SQL не может. Не неси чепуху. Алексей ККакая моя постановка задачи неправильная? Ты о чём? Вот такая: «Я пишу на LINQ, потому что на нём писать удобнее, чем на SQL, и модифицировать такой код удобнее». Бред безумца. Даже не буду эти детские наивные глупости комментировать. Вроде уже не джуниор, а такое выдаёшь. Перегибаешь, хвост. И сравнить можно что угодно с чем угодно, хватало бы "фантазии". Нужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего. Скажи нам - почему ТЫ выбираешь LINQ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 08:37 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Ну и не могу не заметить - порой то, что можно запросто сделат на LINQ - очень запарно делать на SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 08:47 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueНужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего. Скажи нам - почему ТЫ выбираешь LINQ? И еще немаловажный момент - при рефакторинге структуры данных/объектной модели где проще найти зависимости - в строго типизированном коде LINQ или в текстах raw SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 14:51 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueНужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего. Конечно raw :) ИМХУ тут дело вкуса и цвета фломастеров. Лично мне SQL запросы проще писать, и отлаживать их проще в MMS, и тюнинговать проще. Как, например, посмотреть план выполнения linq-запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 15:09 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Dima TMonochromatiqueНужно достать данные из БД - встает непростой выбор - а не пописать ли мне raw текст вставного SQL-запроса, или нажать несколько кнопок (linq) и данные уже в памяти. Что выбираем? Почему? Конечно linq и имеено из-за удобства\быстроты и прочего. Конечно raw :) ИМХУ тут дело вкуса и цвета фломастеров. Лично мне SQL запросы проще писать, и отлаживать их проще в MMS, и тюнинговать проще. Как, например, посмотреть план выполнения linq-запроса? Зачем на него смотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 15:37 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueDima Tпропущено... Конечно raw :) ИМХУ тут дело вкуса и цвета фломастеров. Лично мне SQL запросы проще писать, и отлаживать их проще в MMS, и тюнинговать проще. Как, например, посмотреть план выполнения linq-запроса? Зачем на него смотреть? Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 15:46 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Dima TMonochromatiqueпропущено... Зачем на него смотреть? Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница.Но в итоге-то всё закончилось замечательно, LINQ завоевал своё место под солнцем. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 15:49 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Dima TMonochromatiqueпропущено... Зачем на него смотреть? Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница. Ммм.. Чем меньше возни со скулем - тем лучше. ИМХО, этому должно быть всё подчиненно. Касаемо юзеров, которые привязаны и к адресам и к группам и еще черте-к-чему - то стоит потратить (вложить ресурс) время на структуру данных, чем потом на изучение планов запроса и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 15:51 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Алексей КDima Tпропущено... Чтобы SQL-сервер не грузить ненужной работой и тормоза не создавать. Вот например 19666772 сравнивал, есть разница.Но в итоге-то всё закончилось замечательно, LINQ завоевал своё место под солнцем. :-) Я и не против LINQ, всеми руками за LINQ to Object, тем более что все отлично стыкуется . ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 15:54 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueМмм.. Чем меньше возни со скулем - тем лучше. ИМХО, этому должно быть всё подчиненно. От возни никак ты не уйдешь. Те же индексы кто-то должен создать. Другой вопрос кто. Если это специально обученный DBA, это одно дело, а если ты сам себе DBA то в итоге тебе и возится. MonochromatiqueКасаемо юзеров, которые привязаны и к адресам и к группам и еще черте-к-чему - то стоит потратить (вложить ресурс) время на структуру данных, чем потом на изучение планов запроса и прочее. К сожалению не получится, структура подтянута из другой БД. В данном случае приходится жить с тем что есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 16:03 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Monochromatique Ммм.. Чем меньше возни со скулем - тем лучше. ИМХО, этому должно быть всё подчиненно. Как например через linq такое сделать? Код: sql 1. 2. 3.
Т.е. сказать, используй специально созданный для это джойна фильтрованный индекс, от чего время исполнения уменьшается как минимум в 10000 раз? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2016, 16:43 |
|
|
start [/forum/topic.php?fid=17&msg=39310387&tid=1349361]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
126ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 238ms |
0 / 0 |