Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как обычно про скорость работы...... (+)
|
|||
|---|---|---|---|
|
#18+
Доброго дня... ASE 12.5.2 Помогите понять где тупняк. Есть две таблицы, платежей и мемберов. Пытаюсь их связать. Но скорость работы оставляет делать лучшего.... Таблица мемберов это результат связи многие ко многим, между компаниями и видами дейтельности. Тоесть у компании может быть куча видов деятельности. Таблица платежей содержит форен кей на мемберов для плательщика форен кей на мемберов для получателя форейн кей на таблицу с статьями бюджета ну и дальше как обычно статусы, суммы, даты.......... тоесть по форейн кею на мемберов в таблице платежей мы определяем и вид дейтельности и компанию а по форейнкею на бюджет определяем статью бюджета теперь мне надо сделать выборку всех платежей компании по определённой статье исключая платёж в рамках одного вида деятельности. select isnull(sum(prjPay.pmt_summa), 0) as summa from projectPayment prjPay, projectMember prjMbr where prjPay.itb_id_pl = 1 and условия по необходимым полям(входят в индекс) and prjPay.pmb_id_pl = prjMbr.pmb_id and prjMbr.cmp_id = 1 and prjMbr.prj_id = 1 and not exists (select 1 from projectMember prjMbr_bf where prjMbr_bf.pmb_id = prjPay.pmb_id_bf and prjMbr_bf.prj_id = prjMbr.prj_id) поле prjPay.itb_id_pl это форейнкей на статьи бюджета поле prjPay.pmb_id_pl это форейнкей на projectMember для плательщика поле prjPay.pmb_id_bf это форейнкей на projectMember для получателя в итоге у меня есть все платежи компании по определённой статье, исключая платежи в рамках одного вида деятельности но скорость работы, отставляет желать лучшего :( для таблицы projectMember есть индекс по полям pmb_id, cmp_id, prj_id для таблицы projectPayment есть индекс по полям входящим в условие where в плане запросов видно что все индексы беруться однако при наличии 100 тестовых записей в платежах, и 20 записей в мемберах, и при цикле по все статьям бюджета. 21 статья, тоесть запрос выполняеться 21 раз получаеться время где-то 5-7 секунд. Что я делаю не так???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 12:44 |
|
||
|
Как обычно про скорость работы...... (+)
|
|||
|---|---|---|---|
|
#18+
Возможно поможет использование дополнительных/ой, агрегированных/ой таблиц/ы, наполнение которых будет производится либо по регламенту, либо триггерами с таблицы платежей. А нужная выборка соответственно будет простым, не тормозящим, select * from super_table. Это вопрос архитектуры. И ускорить работу селекта по тем таблицам, по которым вы его делаете думаю не получится. Время его выполнения будет всегда зависит от объемов таблиц и как следствие все время расти. Это неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 13:15 |
|
||
|
Как обычно про скорость работы...... (+)
|
|||
|---|---|---|---|
|
#18+
iLLerВозможно поможет использование дополнительных/ой, агрегированных/ой таблиц/ы, наполнение которых будет производится либо по регламенту, либо триггерами с таблицы платежей. А нужная выборка соответственно будет простым, не тормозящим, select * from super_table. Это вопрос архитектуры. И ускорить работу селекта по тем таблицам, по которым вы его делаете думаю не получится. Время его выполнения будет всегда зависит от объемов таблиц и как следствие все время расти. Это неправильно. блин.... на данный момент в течении года колличество платежей равно 25 тысячам. с каждым годом увеличиваясь.... super_table как вариант, но пока так. а потом будем переделывать НО!!!! неужели для того что бы выполнить такой простой запрос 20 раз, при таком колличстве записей необходимо 5-7 секунд?!?!?!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 14:53 |
|
||
|
Как обычно про скорость работы...... (+)
|
|||
|---|---|---|---|
|
#18+
СергиенкоНО!!!! неужели для того что бы выполнить такой простой запрос 20 раз, при таком колличстве записей необходимо 5-7 секунд?!?!?!? Вполне может быть, связка получается плохая. К примеру: берем одну таблицу, по индексам - быстро, к ней по ключу вторую, далее отбор по условиям, вот тут индексы уже не помогут, а потом еще для каждого полученного кортежа делаем выборку. Т.е. как ни крути есть элемент перебора. Вот он и тормозит. Можно не делать агрегирующих таблиц. Например средний вариант, добавить избыточности, в одну из таблиц добавить необходимые в этом запросе данные из другой таблицы, тогда из селекта убирается вторая таблица, строятся необходимые индексы, уходит алгоритм перебора. Но с добавлением избыточности возникает два побочных эффекта - увеличение объема, увеличение времени модификации дублированных данных, в связи с необходимостью поддержания целостности, ну и собсно алгоритм поддержки целостности должен быть отлажен, без дыр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 15:17 |
|
||
|
Как обычно про скорость работы...... (+)
|
|||
|---|---|---|---|
|
#18+
СергиенкоДоброго дня... select isnull(sum(prjPay.pmt_summa), 0) as summa from projectPayment prjPay, projectMember prjMbr where prjPay.itb_id_pl = 1 and условия по необходимым полям(входят в индекс) and prjPay.pmb_id_pl = prjMbr.pmb_id and prjMbr.cmp_id = 1 and prjMbr.prj_id = 1 and not exists (select 1 from projectMember prjMbr_bf where prjMbr_bf.pmb_id = prjPay.pmb_id_bf and prjMbr_bf.prj_id = prjMbr.prj_id) поле prjPay.itb_id_pl это форейнкей на статьи бюджета поле prjPay.pmb_id_pl это форейнкей на projectMember для плательщика поле prjPay.pmb_id_bf это форейнкей на projectMember для получателя в итоге у меня есть все платежи компании по определённой статье, исключая платежи в рамках одного вида деятельности но скорость работы, отставляет желать лучшего :( для таблицы projectMember есть индекс по полям pmb_id, cmp_id, prj_id для таблицы projectPayment есть индекс по полям входящим в условие where в плане запросов видно что все индексы беруться однако при наличии 100 тестовых записей в платежах, и 20 записей в мемберах, и при цикле по все статьям бюджета. 21 статья, тоесть запрос выполняеться 21 раз получаеться время где-то 5-7 секунд. Что я делаю не так???? 1. если можно, упрощенный DDL для создания таблиц, индесов и FK в студию. (т.е. упрощенный до показанного в примере) 2. в студию план запроса set showplan on и повторить этот запрос.... 3. в студию показатели I/O set statistics io on и повторить запрос... После этого можно будет что-то сказать точнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 10:46 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33910264&tid=2012673]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
1ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 377ms |

| 0 / 0 |
