Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
На днях из одной конторы меня попросили ускорить работу программы. После обследования обнаружилось, что 99,9% времени уходит на выполнение запроса типа: select * from TableA left outer join TableB on TableA.TableB_ID = TableB.ID left outer join TableC on TableA.TableC_ID = TableC.ID where (TableA."Количество"-TableB."Количество"-TableС."Количество")>0 order by TableA.ID причём количество записей в TableA более 500 тыс., выбираемых по условию остаётся 100 тыс. Вопрос к сообществу: как ускорить выборку? P.S.: Специально не указываю на каком сервере, т.к. меня интересует принципиальное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 12:31 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
Хм. Если исходить из того, что схема должна остаться именно такой, а данные нужны только из A - лично я ввел бы в A денормализацию и предрассчитывал это "количество". Соответственно, можно подумать над индексом по этому предрассчитанному полю - хотя не факт, что он ускорит процесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 12:44 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
Я бы посоветовал убрать left outer join и поставить inner join поскольку при отсутствии записей в вычислении выражения where будет null и выражение в таком случае будет FALSE. Эти записи отсекутся сами собой и проверка будет проходить в 5 раз быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 13:20 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
Old NickЯ бы посоветовал убрать left outer join и поставить inner join поскольку при отсутствии записей в вычислении выражения where будет null и выражение в таком случае будет FALSE. Эти записи отсекутся сами собой и проверка будет проходить в 5 раз быстрее На самом деле записи из TableB и TableC могут не существовать, но выражение в действительности написано с использованием iif("количество" is NULL, 0, "количество") для всех 3-х таблиц. to softwarer: а ни каких там индексов по значениям из связных таблиц вам не встречалось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 13:28 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
При выборке 20% записей индексы практически не помогают, зато могут изрядно тормозить модификацию. Прислушайтесь к softwarer, делайте денормализацию с предвычислением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 13:44 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
Nikola18 После обследования обнаружилось, что 99,9% времени уходит на выполнение запроса типа: ... выбираемых по условию остаётся 100 тыс. Может не на выполнение, а на перекачку данных? Nikola18P.S.: Специально не указываю на каком сервере, т.к. меня интересует принципиальное решение. ИМХО, решение как раз может быть в возможностях конкретного сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 13:59 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
Серега Nikola18 После обследования обнаружилось, что 99,9% времени уходит на выполнение запроса типа: ... выбираемых по условию остаётся 100 тыс. Может не на выполнение, а на перекачку данных? нет Серега Nikola18P.S.: Специально не указываю на каком сервере, т.к. меня интересует принципиальное решение. ИМХО, решение как раз может быть в возможностях конкретного сервера. Интересует как раз то, как такое может быть решено в рамках различных серверов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 14:09 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
Nikola18нет Т.е. записи не передаются или пропускная способность сети такая большая? И сколько времени этот запрос обрабатывается в абсолютных величинах? В принципе запрос не слабый по объему данных - он и должен много отжирать. Nikola18Интересует как раз то, как такое может быть решено в рамках различных серверов. Так я и говорю, может на разных по разному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 14:17 |
|
||
|
Условие по связным таблицам.
|
|||
|---|---|---|---|
|
#18+
Индексы здесь точно не помогут. Если нужно получить все данные даже при отсутствии записей в присоединенных таблицах, то попробуйте сделать так. Создаем темповую таблицу и выбираем в нее все записи из первой таблицы. Затем соединяя эту темповую по очереди с остальными двумя апдейтим темповую отнимая значения. Затем делаем выборку по условию. Будет ли быстрее под вопросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2004, 14:20 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=163&tid=1546238]: |
0ms |
get settings: |
15ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
5ms |
| others: | 267ms |
| total: | 419ms |

| 0 / 0 |
