|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Всем добрый день! Возник такой вопрос. Использую Devart.Data.Linq. Написал запрос данных из БД, при его выполнении часто возникает потеря соединения с базой, нагрузка на сеть. Думал, что это из-за его громоздкости (в цикле выполняется соединение двух таблиц). Но иногда коннект с базой отваливается на простых запросах, типа просмотреть все данные из таблицы, без всяких условий. И возникают ощибки типа: "Не удается прочитать данные из транспортного соединения: Программа на вашем хост-компьютере разорвала установленное подключение." И вот такое иногда проскакивает, но это при выполнении громоздкого запроса: " StackTrace в Devart.Data.Linq.LinqCommandExecutionException.CanThrowLinqCommandExecutionException(String message, Exception e) в Devart.Data.Linq.DataProvider.a(c1 A_0, Object[] A_1) в Devart.Data.Linq.DataProvider.b(c1 A_0, Object[] A_1) в Devart.Data.Linq.Engine.a5.a(IProvider A_0, Object[] A_1) в Devart.Data.Linq.Engine.DataQuery`1.h() в System.Linq.SystemCore_EnumerableDebugView`1.get_Items()" Подскажите, пожалуйста, в чем может быть дело? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 17:52 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Meshel, Покажите джоин в цикле :( ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 18:42 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
"... простых запросах , типа просмотреть все данные из таблицы, без всяких условий .... " ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 18:47 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Здравствуйте. Простые запросы - это вот такие: Код: c# 1. 2.
и вот тот самый громадный запрос: Код: c# 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 09:48 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Meshel, по "простому" ни чего не скажу... возможно много данных, возможно блокировки... по второму - это звездец и к тому же, в цикле... попробуйте сделать процедуру... ну либо посмотрите на трассу (сформированный sql запрос)... Возможно станет понятно, что нужно подкрутить... P.S.: а Вы уверены, что последний запрос выдает то, что нужно? Какой-то он, мягко говоря, странный... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 12:24 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Спасибо, что откликнулись. Я согласен с характеристикой последнего запроса. В нем несколько слов "from", из-за этого в результирующем sql много cross join и 1 outer join.Читал, что join-ны сами по себе грузят сильно. Но у меня грубо говоря, две таблицы, нужно вытянуть все данные из левой и из правой, учитывая, что по некоторым данным в левой нет данных из правой таблицы, вроде как без left join не обойтись. Я уже думал, может данные вытягивать не все сразу, а хотя бы построчно, но ускорит ли это выполнение запроса. Или же, может быть, вывести таблицу всю целиком, без join-на, а потом из нее дергать нужные данные, исходя из входных условий, ведь это будет уже не со стороны БД происходить (применение условий к коллекции данных,например,типа Iqueryable), или я ошибаюсь? И еще вариант, т.к. количество столбцов динамическое, попробовать использовать предикаты, только вот не знаю, пойдет ли такой запрос на разные СУБД (MySQL,Oracle,SQLite)? Я использую LinqConnect Professional (ORM фреймворк) от Devart. А выдает запрос вроде как то, что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 17:59 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Meshel, Приведи схему данных, наборы данных и результирующий набор. PS. По поводу того что ты написал - не делай так. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 19:06 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Здравствуйте. Вкладываю необходимую информацию, надеюсь на Вашу помощь. Там запрос на MySQL, чтоб показать, что должно получится, хотя если писать одним запросом, то получается больше данных, чем должно быть, т.к. в каждоим leftjoin участвуют поля charId,тогда и по ним нужно давать внешнюю связку ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 17:41 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Meshel, посмотрел архив, сгенери пожалуйста скрипт создающий этот кусок схемы с констрейтами и прочим. для каждой таблицы выгрузи в виде inserto'ов по небольшому куску данных 10-15 строчек. прогони скрипт, чтобы все создавалось исоздавалось само. и в кратце по каждой таблице сделай описание, что она означает. а потом в этой терминологии сформулируй, что нужно получить. чутку схему понял, но ты привел две картинки с двумя разными результатами, какой из них верный или оба не правильные, тогда напиши список с колонками, что нужно получить от руки на основе данных в инсертах пара/тройка строчек? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 00:56 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Здравствуйте. Высылаю архив с более подробным описанием. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 13:06 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Какие-нибудь будут предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 14:11 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
MeshelКакие-нибудь будут предложения? бывает такое что соединение рвётся на самом первом запросе? если нет то на каком примерно, либо через сколько времени работы? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 14:26 |
|
Оптимизация запроса
|
|||
---|---|---|---|
#18+
Здравствуйте. Соединение рвется в debug пошаговом режиме. Когда запускаю модуль и просматриваю данные, был обрыв от силы раз-два, при повторном обновлении запрос проходил, грид отображал данные. В debug режиме в основном разрыв был в цикле типа: Код: c# 1.
, selectVals - результат запроса. В принципе, я читал на англоязычных сайтах, что в таком режиме это возможно. Просто я подумал, может, можно как-нибудь оптимизировать запрос, не поломается ли что при таких цикличных обращениях к БД. Или может сделать выборку всех значений из базы (учитывая входные условия), а потом на стороне модели уже в цикле формировать нужный вид представления данных, используя лямба-выражения. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 16:20 |
|
|
start [/forum/topic.php?fid=17&fpage=28&tid=1350115]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 9ms |
total: | 118ms |
0 / 0 |