|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Доброго времени суток! Помогите оптимизировать запрос. Он нереально долго выполняется при небольшом объеме данных (около 40 минут для 250 тыс строк). При этом без условия на время ([DEBITOR].D_UBJH + [DEBITOR].D_UBJJ + [DEBITOR].D_UBMM + [DEBITOR].D_UBTT >= '20140101' справляется за 20 секунд. Код: sql 1. 2. 3. 4. 5. 6. 7.
Очень надеюсь на вашу помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 15:38 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Извините, не написал необходимые уточнения: В таблице TIT первичный ключ состоит из 3 полей: T_INKNR + T_SNR + T_NR В таблице DEBITOR ПК состоит из 2 полей: S_INK_NR + S_SNR Все поля - STRING, за исключением T1_KZ, который INT. В одной таблице хранятся задолженности (DEBITOR), в другой - акты(TIT). Нужно проверить имеет ли задолженность соответствующий ей акт. Одна задолженность может быть нескольких видов и ей могут соответствовать несколько актов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 16:44 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
автор[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 не учитывает регистр. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 16:48 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Кривцов Анатолийавтор[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 не учитывает регистр. спасибо! попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 17:27 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
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" и так далее, и посмотри на скорость выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 17:48 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
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" и так далее, и посмотри на скорость выполнения. Тут дело в том, что дата может быть любая. Ее задает ползователь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 17:53 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
argnis, не имеет значение, разбей дату введенную юзером так, как я ранее показал и проверь скорость работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 17:58 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Stanislav Pargnis, не имеет значение, разбей дату введенную юзером так, как я ранее показал и проверь скорость работы. Заработало действительно быстрее. Правда не пойму почему, но очень большое Вам спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 18:07 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Код: sql 1.
Не делайте так, если вы действительно не хотите получить декартово произведение строк. Перепишите через нормальный JOIN и проверьте наличие индексов по всем полям, входящим в джоин и WHERE ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 06:26 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
argnisЗаработало действительно быстрее. Правда не пойму почему, но очень большое Вам спасибо! У тебя в запросе идёт конкатенация строк: [DEBITOR].D_UBJH + [DEBITOR].D_UBJJ , а это медленная операция, тем более конкатенация сразу нескольких значений. Поэтому лучше делать через AND: [DEBITOR].D_UBJH ="20" AND [DEBITOR].D_UBJJ="14" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 09:37 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
argnisВ них хранится значение даты задолжности D_UBJH [столетие - 19 или 20], D_UBJJ[Год - от 1 до 99], D_UBMM[Месяц - от 1 до 12], D_UBTT [День - от 1 до 31] Интересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 09:45 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Кривцов АнатолийargnisВ них хранится значение даты задолжности D_UBJH [столетие - 19 или 20], D_UBJJ[Год - от 1 до 99], D_UBMM[Месяц - от 1 до 12], D_UBTT [День - от 1 до 31] Интересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты. База создавалась очень давно и что-то менять в ней я не имею права ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 10:08 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
MrShin Код: sql 1.
Не делайте так, если вы действительно не хотите получить декартово произведение строк. Перепишите через нормальный JOIN и проверьте наличие индексов по всем полям, входящим в джоин и WHERE Я проверял, JOIN работает нереально медленно. И индексов почти нет, я не могу менять базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 10:13 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Кривцов АнатолийИнтересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты. Я бы использовал DOUBLE поле, с ним меньше проблем при индексировании, при создании запросов, даже не нужно думать о формате даты. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 10:35 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Кривцов АнатолийИнтересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты.argnis....База создавалась очень давно и что-то менять в ней я не имею праваargnisПомогите оптимизировать запрос.... На не правильно созданной таблице . Без её изменения,как не изощряйся,ничего путного не выйдет ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 12:46 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
sdkuКривцов АнатолийИнтересно, это вы придумали такой изощренный способ хранения даты? Да еще и в текстовых полях. Хранение даты в одном индексированном поле типа "Дата/Время" удобнее во всех отношениях и без проблем можно получить любой компонент даты.argnis....База создавалась очень давно и что-то менять в ней я не имею праваargnisПомогите оптимизировать запрос.... На не правильно созданной таблице . Без её изменения,как не изощряйся,ничего путного не выйдет Stanislav P очень хорошую идею подкинул, за что ему спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 15:16 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 15:55 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, Идея хорошая для моего задания, так как я работю с тем, что есть. Правки в базу вносить не могу. Формат даты определен так, как он есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 16:36 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Подкиньте пожалуйста идею, как реализовать запрос. Таблицы нарисованы к EXCEL. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 16:46 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Забыл файл ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 16:46 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, Double всегда double, а дата/время в Access вариативно и зависит от фаз луны, региональных настроек и настроения очередного индуса в команде разработки MS Access. Я как-то натолкнулся на проблему с типом поля дата/время. Потом кто-то из гуру по Акссесу то ли в статье, то ли в книге об этом писал. По той же самой причине я не использую boolean поле, а вместо него integer с проверкой ввода на 0 и -1. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 17:33 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
sdkuargnisПомогите оптимизировать запрос.... На не правильно созданной таблице .Без её изменения,как не изощряйся,ничего путного не выйдет argnisПодкиньте пожалуйста идею, как реализовать запрос....Все это сильно напоминает циклическую ссылку ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 17:37 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
sdku, Просто прошлый запрос я не правильно составил, он не учитывал то, что вo второй таблице не все ключи из первой. К сожалению, LEFT JOIN работает очень медленно. Думаю, как обойтись без него. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2019, 10:00 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
argnis, в данном случае словосочетание "циклическая ссылка" применена не к коду а к Вашему вопросу: -помогите оптимизировать запрос -не меняя таблицу ничего не выйдет -ну подкиньте идею,только ничего не меняйте замкнутый круг,однако (разве что,пользуясь DateSerial, создать в запросе поле с датой и производить отбор по нему-но вряд ли это сильно что-то изменит) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2019, 12:01 |
|
|
start [/forum/topic.php?fid=45&msg=39860421&tid=1610480]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 448ms |
0 / 0 |