|
|
|
Оптимизация запросов - один большой или несколько маленьких?
|
|||
|---|---|---|---|
|
#18+
База - ФБ 1.5, вся логика построена на хранимых процедурах, т.е. вся обработка выполняется только на сервере. Данные - от 1 до 5000-7000 записей о клиентах, каждой из которых может принадлежать от 1 до 20 подчиненных записей из разных таблиц. Кроме того, используются данные из справочников - тарифы, названия улиц и т.д. В настоящий момент обработка реализована следующим образом: для перерасчёта данных вызывается ХП, в которой имеется 1 for select , включающий 6 union 'ов. В теле selecta'а для каждой записи вызываются несколько других ХП, которые также делают всевозможные запросы к БД для получения уточняющей информации. Теоритически, наиболее "красивым" решением будет создание вместо нескольких маленьких - одного большого и хитромудрого запроса, который подготовит одну большую выборку со всеми необходимыми данными. После чего по этой выборке делается один проход ... и оп-ля, наши сбоку - ваших нет... Уменьшение трафика, уменьшается число обращений в диску и так далее. Вопрос заключается в следующем. Есть ли какие-либо ограничения на сложность запроса в ФБ? Сложный запрос состоит, в моём случае, из 6 union'ов, в каждом из которых по 2-5 вложенных друг в друга select'ов. Строка с текстом запроса занимает 5100 байт. И вообще, имеет ли смысл делать такую оптимизацию? Какие тут могут быть подводные камни? Если кто-нибудь проводил сравнение производительности запросов "один большой против нескольких маленьких", поделитесь пожалуйста вашим мнением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 07:34:24 |
|
||
|
Оптимизация запросов - один большой или несколько маленьких?
|
|||
|---|---|---|---|
|
#18+
Лично я предпочитаю делать авторасчет, т.е. данные расчитываются по мере занесения. В этом случае всегда видно текущее состояние дел и не нужно специально запускать расчет. Правда это бывает не всегда возможным... А на счет перерасчета - так лучше оставь как есть... (лучшее - враг хорошего) Тем более что разбивка задачи на несколько функционально законченных действия повышает ее читабельность и возможность модернизации... Сам расчет, как я понял, запускается не часто и на его 'вылизывание' не стоит тратить время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 13:41:17 |
|
||
|
Оптимизация запросов - один большой или несколько маленьких?
|
|||
|---|---|---|---|
|
#18+
Сложный запрос FB выполнит, видел я и сложнее. Но ЧАЩЕ приходилось раскручивать таких монстров в ХП для ускорения работы. В твоем случае пока не напишешь и не выполнишь его не узнаешь будет быстрее или медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 14:26:59 |
|
||
|
Оптимизация запросов - один большой или несколько маленьких?
|
|||
|---|---|---|---|
|
#18+
ololЛично я предпочитаю делать авторасчет, т.е. данные расчитываются по мере занесения. В этом случае всегда видно текущее состояние дел и не нужно специально запускать расчет. Да, у меня именно так и сделано - расчёт производится в тот момент, когда данные заносятся БД. Но по логике работы у меня он выполняется не автоматом, а запускается по специальной кнопочке "Расчитать". ololА на счет перерасчета - так лучше оставь как есть... (лучшее - враг хорошего) Тем более что разбивка задачи на несколько функционально законченных действия повышает ее читабельность и возможность модернизации... Сам расчет, как я понял, запускается не часто и на его 'вылизывание' не стоит тратить время. Понял, так и сделаю. Всем спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 23:35:18 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=464&tid=1578343]: |
0ms |
get settings: |
4ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 314ms |

| 0 / 0 |
