powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите оптимизировать SQL запрос
14 сообщений из 14, страница 1 из 1
Помогите оптимизировать SQL запрос
    #38555024
Chumakov_JA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно получить из одной таблицы данные в идеале нужна сумма по столбцу
сервер расположен удаленно доступа к нему НЕТ, могу только выполнять запросы.
SELECT SUM(Payment."Sum") 
FROM ASV_Entities.Payment Payment 
WHERE (Payment.InsurerTerDepFK='36058') 
AND (YEAR(Payment.Enter) = '2013') 
AND (MONTH(Payment.Enter) = '1') 
AND (Payment.IsIncome=1) 
AND (Payment.IsFiction=0) 
AND (Payment.KBKFK='39210202010061000160')
время выполнения запроса около 30 минут

а теперь вопрос

при запросеSELECT Payment."Sum" FROM ASV_Entities.Payment Payment WHERE Payment.InsurerTerDepFK=36058
выбирается 1015000 записей время запроса около 2 минут

при добавлении любого условия время выполнения запроса увеличивается в 2 раза

подскажите какое нибуть решение.
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38555069
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chumakov_JA, есть какая-нибудь информация об индексах в этой таблице?
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38555070
Chumakov_JA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintChumakov_JA, есть какая-нибудь информация об индексах в этой таблице?

в том то и дело что индексированно только поле ID
которое ненужно
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38555084
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chumakov_JAdoublefintChumakov_JA, есть какая-нибудь информация об индексах в этой таблице?

в том то и дело что индексированно только поле ID
которое ненужноЭтот индекс существует по умолчанию IDKEY.
Если нет возможности добавить индексов, вариантов кроме перекачать данные в таблицу туда, где будет возможности добавить индексы.

только вот вопрос, если доступа к серверу нет, то как вы выполняете запросы ?
с помощью SQL можно добавить индексов, остается вопрос того как это переиндексировать, после добавления индексов
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38555091
Chumakov_JA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorс помощью SQL можно добавить индексов, остается вопрос того как это переиндексировать, после добавления индексов
дело в том что админ перегружает сервер каждую ночь.
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38555092
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chumakov_JADAiMorс помощью SQL можно добавить индексов, остается вопрос того как это переиндексировать, после добавления индексов
дело в том что админ перегружает сервер каждую ночь.Думаю это тоже не проблема, и зависит от версии Cache.
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38555094
Chumakov_JA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorChumakov_JAпропущено...

дело в том что админ перегружает сервер каждую ночь.Думаю это тоже не проблема, и зависит от версии Cache.

версия вроде 2012
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38555242
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chumakov_JAпри запросеSELECT Payment."Sum" FROM ASV_Entities.Payment Payment WHERE Payment.InsurerTerDepFK=36058выбирается 1015000 записей время запроса около 2 минут

при добавлении любого условия время выполнения запроса увеличивается в 2 раза
Выполнение запроса с раздельмыми условиями сколько дает по времени?
SELECT SUM(Payment."Sum") 
FROM ASV_Entities.Payment Payment 
WHERE
(YEAR(Payment.Enter) = '2013')SELECT SUM(Payment."Sum") 
FROM ASV_Entities.Payment Payment 
WHERE
(MONTH(Payment.Enter) = '1') SELECT SUM(Payment."Sum") 
FROM ASV_Entities.Payment Payment 
WHERE
(Payment.IsIncome=1) SELECT SUM(Payment."Sum") 
FROM ASV_Entities.Payment Payment 
WHERE
(Payment.IsFiction=0) SELECT SUM(Payment."Sum") 
FROM ASV_Entities.Payment Payment 
WHERE
(Payment.KBKFK='39210202010061000160')
Сколько будут выполняться эти запросы?
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38559552
Den47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AND (YEAR(Payment.Enter) = '2013') 
AND (MONTH(Payment.Enter) = '1')

Уберите эти строки которые не дают использовать индекс по дате. Даты можно фильтровать через between. Число дней в январе известно.
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38559568
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den47,

Совет, конечно хороший, если у него был хоть какой-то индекс, а у него их нет вообще
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38559666
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Зная источник этой таблицы могу сказать, что индексы там есть, причем по всем полям, участвующим в запросе, но единственное полезное поле для использования индекса это как раз Payment.Enter, которому не дают использоваться из-за функций
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38560332
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosЗная источник этой таблицы могу сказать, что индексы там есть...
Обожаю этот безграничный неизведанный мир caché разработки :)
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38561331
rstr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Chumakov_JA, Создание индекса пройдет?
Код: sql
1.
CREATE [UNIQUE | BITMAP] INDEX index-name  ON [TABLE] [schema-name.]table-name   (field-name, ...)
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38567733
Chumakov_JA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den47AND (YEAR(Payment.Enter) = '2013') 
AND (MONTH(Payment.Enter) = '1')

Уберите эти строки которые не дают использовать индекс по дате. Даты можно фильтровать через between. Число дней в январе известно.SELECT SUM("Sum") 
FROM ASV_Entities.Payment Payment 
WHERE (InsurerTerDepFK=36058) 
AND (Enter BETWEEN '2014-1-01 00:00:00' AND '2014-1-31 00:00:00') 
AND (IsIncome=1) 
AND (IsFiction=0) 
AND (KBKFK=39210202010061000160) Вот такая конструкция ни к чему не превела

а вот так полегчалоSELECT SUM("Sum")
FROM ASV_Entities.Payment Payment 
WHERE InsurerTerDepFK=36058 
AND YEAR(Enter) =2014 
AND MONTH(Enter) = 1 
AND IsIncome=1 
AND IsFiction=0 
AND KBKFK IN (39210202010061000160) 
GROUP BY KBKFKи именно при добавлении
GROUP BY KBKFK
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите оптимизировать SQL запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]