Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

большой sql-запрос в программе

333
15 декабря 2005 года
GHopper
200 / / 28.12.2004
Здраствуйте!
Есть программа, которая посылает запросы к БД (MS SQL) и обрабатывает результат. Проблема в том, что запросы ОЧЕНЬ большие и запустнные, выполняются по несколько минут. Задача сверху - переделать программу и сделать ее пошустрее. Вопрос - как?

Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...
Он используется постоянно, но я с этим ничег оне могу поделать! Можно было-бы заменить процедурой, принимающей одно значение и выводящей результат в зависимости от этого значения. Но процедуры могут возвращать только целые числа! Как заменить часто используемые повторяющиеся участки запроса?

DECLARE @str char(30) тоже нельзя использовать везде, где хочется!

Как сделать исходый код программы более читабельным? Может попробовать хранить запросы в БД???
315
15 декабря 2005 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by GHopper
Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...
Он используется постоянно, но я с этим ничег оне могу поделать! Можно было-бы заменить процедурой, принимающей одно значение и выводящей результат в зависимости от этого значения. Но процедуры могут возвращать только целые числа! Как заменить часто используемые повторяющиеся участки запроса?

DECLARE @str char(30) тоже нельзя использовать везде, где хочется!

Как сделать исходый код программы более читабельным? Может попробовать хранить запросы в БД???


Заменяя часто используемые в разных местах участки получаем: удобочитаемость кода, меньший размер занимаемый им и возможность при изменении менять только в одном месте. Плата за это - снижение производительности. Как я понимаю этого как раз не надо делать.
Для оптимизации необходимо понимать структуру работы клиент-сервер. Что где запускается, где сохраняются курсоры и выполняются запросы. Что выступает в качестве клиентсой части?

333
16 декабря 2005 года
GHopper
200 / / 28.12.2004
в качестве клиентской части выступает моя программа, написанная на Visual C++. Данные, с которыми она работает - сервер Microsoft SQL Server.
Я так подумал, для оптимизации скорости выполнения самое эффективное - сделать более грамотные запросы. А вот как оптимизировать удобочитабельность, пусть даже в ущерб скорости? Как заменить часто используемые в разных местах участки? Нужен механизм наподоби макросов в Си. Есть что-нибудь похожее?
10
16 декабря 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by GHopper
Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...


Если в программе приходится писать такую муру, база нереляционная, следовательно, задача решена неправильно. Нужно вначале привести решение к нормальной форме, а потом уже оптимизировать (если понадобится).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог