powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
24 сообщений из 24, страница 1 из 1
Помогите оптимизировать запрос
    #39860380
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Помогите оптимизировать запрос. Он нереально долго выполняется при небольшом объеме данных (около 40 минут для 250 тыс строк).
При этом без условия на время ([DEBITOR].D_UBJH + [DEBITOR].D_UBJJ + [DEBITOR].D_UBMM + [DEBITOR].D_UBTT >= '20140101' справляется за 20 секунд.

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT [DEBITOR].D_INK_NR, [DEBITOR].D_SNR, [TIT].T_NR,  
   IIF( ([TIT].T1_KZ <> 16 AND ([TIT].T1_ZV = 'j' OR [TIT].T1_ZV = 'J')  AND ([TIT].T1_GS = 'j' OR [TIT].T1_GS = 'J')) 
      OR ([TIT].T2_KZ <> 16 AND ([TIT].T2_ZV = 'j' OR [TIT].T2_ZV = 'J')  AND ([TIT].T2_GS = 'j' OR [TIT].T2_GS = 'J')) 
      OR ([TIT].T3_KZ <> 16 AND ([TIT].T3_ZV = 'j' OR [TIT].T3_ZV = 'J')  AND ([TIT].T3_GS = 'j' OR [TIT].T3_GS = 'J')) , 'YES', 'NO' ) AS ISTIT  
FROM DEBITOR, TIT 
WHERE [TIT].T_INKNR=[DEBITOR].D_INK_NR AND [TIT].T_SNR=[DEBITOR].S_SNR 
AND [DEBITOR].D_SPERR = '0' AND [DEBITOR].D_ERLDAT ='00000000'  AND [DEBITOR].D_UBJH + [DEBITOR].D_UBJJ + [DEBITOR].D_UBMM + [DEBITOR].D_UBTT >= '20140101'



Очень надеюсь на вашу помощь!
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860421
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, не написал необходимые уточнения:
В таблице TIT первичный ключ состоит из 3 полей: T_INKNR + T_SNR + T_NR
В таблице DEBITOR ПК состоит из 2 полей: S_INK_NR + S_SNR
Все поля - STRING, за исключением T1_KZ, который INT.

В одной таблице хранятся задолженности (DEBITOR), в другой - акты(TIT). Нужно проверить имеет ли задолженность соответствующий ей акт. Одна задолженность может быть нескольких видов и ей могут соответствовать несколько актов.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860426
автор[DEBITOR].D_UBJH + [DEBITOR].D_UBJJ + [DEBITOR].D_UBMM + [DEBITOR].D_UBTT >= '20140101' Поясните что хранится в каждом из 4-х полей и какой их тип. Они индексированные?
Значения месяца и дня могут отличаться от 01?
автор[TIT].T1_ZV = 'j' OR [TIT].T1_ZV = 'J' Если у вас обычная БД Акса, то это лишнее - JET не учитывает регистр.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860450
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолийавтор[DEBITOR].D_UBJH + [DEBITOR].D_UBJJ + [DEBITOR].D_UBMM + [DEBITOR].D_UBTT >= '20140101' Поясните что хранится в каждом из 4-х полей и какой их тип. Они индексированные?
Значения месяца и дня могут отличаться от 01?

В них хранится значение даты задолжности D_UBJH [столетие - 19 или 20], D_UBJJ[Год - от 1 до 99], D_UBMM[Месяц - от 1 до 12], D_UBTT [День - от 1 до 31]

Кривцов Анатолийавтор[TIT].T1_ZV = 'j' OR [TIT].T1_ZV = 'J' Если у вас обычная БД Акса, то это лишнее - JET не учитывает регистр.
спасибо! попробую
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860463
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
argnisВ них хранится значение даты задолжности D_UBJH [столетие - 19 или 20], D_UBJJ[Год - от 1 до 99], D_UBMM[Месяц - от 1 до 12], D_UBTT [День - от 1 до 31]
спасибо! попробую

Разбей запрос на SELECT .... D_UBJH="20" AND D_UBJJ = "14" и так далее, и посмотри на скорость выполнения.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860467
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav PargnisВ них хранится значение даты задолжности D_UBJH [столетие - 19 или 20], D_UBJJ[Год - от 1 до 99], D_UBMM[Месяц - от 1 до 12], D_UBTT [День - от 1 до 31]
спасибо! попробую

Разбей запрос на SELECT .... D_UBJH="20" AND D_UBJJ = "14" и так далее, и посмотри на скорость выполнения.

Тут дело в том, что дата может быть любая. Ее задает ползователь.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860475
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
argnis, не имеет значение, разбей дату введенную юзером так, как я ранее показал и проверь скорость работы.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860486
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Pargnis, не имеет значение, разбей дату введенную юзером так, как я ранее показал и проверь скорость работы.

Заработало действительно быстрее. Правда не пойму почему, но очень большое Вам спасибо!
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860668
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
FROM DEBITOR, TIT


Не делайте так, если вы действительно не хотите получить декартово произведение строк. Перепишите через нормальный JOIN и проверьте наличие индексов по всем полям, входящим в джоин и WHERE
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860708
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
argnisЗаработало действительно быстрее. Правда не пойму почему, но очень большое Вам спасибо!
У тебя в запросе идёт конкатенация строк: [DEBITOR].D_UBJH + [DEBITOR].D_UBJJ , а это медленная операция, тем более конкатенация сразу нескольких значений. Поэтому лучше делать через AND: [DEBITOR].D_UBJH ="20" AND [DEBITOR].D_UBJJ="14"
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860712
argnisВ них хранится значение даты задолжности D_UBJH [столетие - 19 или 20], D_UBJJ[Год - от 1 до 99], D_UBMM[Месяц - от 1 до 12], D_UBTT [День - от 1 до 31] Интересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860724
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов АнатолийargnisВ них хранится значение даты задолжности D_UBJH [столетие - 19 или 20], D_UBJJ[Год - от 1 до 99], D_UBMM[Месяц - от 1 до 12], D_UBTT [День - от 1 до 31] Интересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты.
База создавалась очень давно и что-то менять в ней я не имею права
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860728
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin
Код: sql
1.
FROM DEBITOR, TIT


Не делайте так, если вы действительно не хотите получить декартово произведение строк. Перепишите через нормальный JOIN и проверьте наличие индексов по всем полям, входящим в джоин и WHERE

Я проверял, JOIN работает нереально медленно. И индексов почти нет, я не могу менять базу.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860753
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов АнатолийИнтересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты.
Я бы использовал DOUBLE поле, с ним меньше проблем при индексировании, при создании запросов, даже не нужно думать о формате даты.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39860849
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов АнатолийИнтересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты.argnis....База создавалась очень давно и что-то менять в ней я не имею праваargnisПомогите оптимизировать запрос.... На не правильно созданной таблице .
Без её изменения,как не изощряйся,ничего путного не выйдет
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861016
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuКривцов АнатолийИнтересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты.argnis....База создавалась очень давно и что-то менять в ней я не имею праваargnisПомогите оптимизировать запрос.... На не правильно созданной таблице .
Без её изменения,как не изощряйся,ничего путного не выйдет


Stanislav P очень хорошую идею подкинул, за что ему спасибо
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861040
Stanislav PЯ бы использовал DOUBLE поле, с ним меньше проблем при индексировании, при создании запросов, даже не нужно думать о формате даты.
argnisStanislav P очень хорошую идею подкинул, за что ему спасибо
И чем хороша идея? В Аксе поле "Дата/Время" это то же DOUBLE, с таким же индексированием, но значения отображаются как дата. Все что изменится при использовании типа DOUBLE, это, например, число 43720 вместо 12.09.19 или (еще круче) 43720.6625810185 вместо 12.09.19 15:54:07.
Это сильно удобно? А если надо отобрать записи за последний месяц, надо знать числовые эквиваленты начальной и конечной даты

Кстати, конструкция WHERE [ПолеТипаДата] = 43720 вполне работоспособна и вернет всё с датой 12.09.19.

На всякий случай:
Код: vbnet
1.
2.
?Cdbl(Date())
 43720 
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861080
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий,

Идея хорошая для моего задания, так как я работю с тем, что есть. Правки в базу вносить не могу. Формат даты определен так, как он есть.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861090
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подкиньте пожалуйста идею, как реализовать запрос. Таблицы нарисованы к EXCEL.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861091
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл файл
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861112
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий,

Double всегда double, а дата/время в Access вариативно и зависит от фаз луны, региональных настроек и настроения очередного индуса в команде разработки MS Access.
Я как-то натолкнулся на проблему с типом поля дата/время. Потом кто-то из гуру по Акссесу то ли в статье, то ли в книге об этом писал.
По той же самой причине я не использую boolean поле, а вместо него integer с проверкой ввода на 0 и -1.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861114
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuargnisПомогите оптимизировать запрос.... На не правильно созданной таблице .Без её изменения,как не изощряйся,ничего путного не выйдет
argnisПодкиньте пожалуйста идею, как реализовать запрос....Все это сильно напоминает циклическую ссылку
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861323
argnis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Просто прошлый запрос я не правильно составил, он не учитывал то, что вo второй таблице не все ключи из первой. К сожалению, LEFT JOIN работает очень медленно. Думаю, как обойтись без него.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #39861419
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
argnis,
в данном случае словосочетание "циклическая ссылка" применена не к коду а к Вашему вопросу:
-помогите оптимизировать запрос
-не меняя таблицу ничего не выйдет
-ну подкиньте идею,только ничего не меняйте
замкнутый круг,однако
(разве что,пользуясь DateSerial, создать в запросе поле с датой и производить отбор по нему-но вряд ли это сильно что-то изменит)
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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