большой sql-запрос в программе
Есть программа, которая посылает запросы к БД (MS SQL) и обрабатывает результат. Проблема в том, что запросы ОЧЕНЬ большие и запустнные, выполняются по несколько минут. Задача сверху - переделать программу и сделать ее пошустрее. Вопрос - как?
Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...
Он используется постоянно, но я с этим ничег оне могу поделать! Можно было-бы заменить процедурой, принимающей одно значение и выводящей результат в зависимости от этого значения. Но процедуры могут возвращать только целые числа! Как заменить часто используемые повторяющиеся участки запроса?
DECLARE @str char(30) тоже нельзя использовать везде, где хочется!
Как сделать исходый код программы более читабельным? Может попробовать хранить запросы в БД???
Цитата:
Originally posted by GHopper
Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...
Он используется постоянно, но я с этим ничег оне могу поделать! Можно было-бы заменить процедурой, принимающей одно значение и выводящей результат в зависимости от этого значения. Но процедуры могут возвращать только целые числа! Как заменить часто используемые повторяющиеся участки запроса?
DECLARE @str char(30) тоже нельзя использовать везде, где хочется!
Как сделать исходый код программы более читабельным? Может попробовать хранить запросы в БД???
Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...
Он используется постоянно, но я с этим ничег оне могу поделать! Можно было-бы заменить процедурой, принимающей одно значение и выводящей результат в зависимости от этого значения. Но процедуры могут возвращать только целые числа! Как заменить часто используемые повторяющиеся участки запроса?
DECLARE @str char(30) тоже нельзя использовать везде, где хочется!
Как сделать исходый код программы более читабельным? Может попробовать хранить запросы в БД???
Заменяя часто используемые в разных местах участки получаем: удобочитаемость кода, меньший размер занимаемый им и возможность при изменении менять только в одном месте. Плата за это - снижение производительности. Как я понимаю этого как раз не надо делать.
Для оптимизации необходимо понимать структуру работы клиент-сервер. Что где запускается, где сохраняются курсоры и выполняются запросы. Что выступает в качестве клиентсой части?
Я так подумал, для оптимизации скорости выполнения самое эффективное - сделать более грамотные запросы. А вот как оптимизировать удобочитабельность, пусть даже в ущерб скорости? Как заменить часто используемые в разных местах участки? Нужен механизм наподоби макросов в Си. Есть что-нибудь похожее?
Цитата:
Originally posted by GHopper
Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...
Есть такая идея: заменить часто используемые участки процедурами. Вот например такой участок:
...
THEN
'(основной' +
CASE A.isDefense
WHEN 1
THEN ', охрана'
ELSE ''
END + ')'
...
Если в программе приходится писать такую муру, база нереляционная, следовательно, задача решена неправильно. Нужно вначале привести решение к нормальной форме, а потом уже оптимизировать (если понадобится).