powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа Access Jet
25 сообщений из 51, страница 1 из 3
Работа Access Jet
    #40084674
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть база на SQL, клиентская часть на access 2003 присоединенные таблицы через ODBC
когда база выросла более 10000000 записей базовый запрос (около 5000-6000 записей)
начал тормозить (выполнение более 20 сек)

Код: sql
1.
2.
3.
4.
SELECT dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка, Sum(dbo_Архив.Значение) AS [Sum-Значение]
FROM dbo_Архив
GROUP BY dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка
HAVING (((dbo_Архив.ID_наработки) Between (CLng([Forms]![Основная]![Индекс_С])) And (CLng([Forms]![Основная]![Индекс_по]))));



построил покрывающий индекс, думал сейчас все взлетит, а запрос его не использует

начал переписывать запрос под условия отбора
Код: sql
1.
2.
3.
4.
SELECT dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка, Sum(dbo_Архив.Значение) AS [Sum-Значение]
FROM dbo_Архив
GROUP BY dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка
HAVING (((dbo_Архив.ID_наработки) Between (443961) And (443962)));



и все заработало (выполнение около 2 сек)

Кто-нибудь из ГУРУ может объяснить данное поведение access, т.к. клиентам приходиться ставить отдельную клиентскую часть в связи с переписыванием запроса, что не удобно
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084687
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP

Код: vbnet
1.
2.
...HAVING (((dbo_Архив.ID_наработки) Between (CLng([Forms]!Основная]!Индекс_С]))
 And (CLng([Forms]![Основная]![Индекс_по]))));


-почему HAVING а не WHERE? (разберитесь в чем разница этих предложений)
-чем вызвано применение Clng?(надеюсь поля [ID_наработки], [Индекс_С],[Индекс_по] числовые)
когда ответите на эти вопросы поймете почему ACCESS себя так ведет
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084712
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поля числовые, но access без использования clng() передает их как строковые и скорость выполнения падает катастрофически до 1,5 - 2 минуты

Разницу между Having и Where знаю, пробовал и так и этак при тестировании разницы никакой

Вопрос почему Jet при использовании функций не использует индекс, а при явном указании
числовых значений в запросе, использует
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084714
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
Поля числовые, но access без использования clng() передает их как строковые
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084770
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
т.к. клиентам приходиться ставить отдельную клиентскую часть в связи с переписыванием запроса, что не удобно

Ну дык храните запрос в таблице.
В запросах никогда не использую ссылки на поля формы.
Это засада. (Не явное приведение к типу)
Присоединенные таблицы(это есчё те костыли в производительности)
Переходите на ADO и RecordSet и будет вам счастье.
Пора по серьезному тискать Access.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084778
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если переделать в параметрический запрос, и передавать с форм параметрами?
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084827
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну дык храните запрос в таблице.
Придется мудрить что-то с разделением по пользователям
и привязывать каждому свой запрос в таблице

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

Присоединенные таблицы(это ещё те костыли в производительности)
Не согласен, если не читать из целиком все очень ничего,
и с редактированием данных нет проблем

Переходите на ADO и RecordSet и будет вам счастье.
Пора по серьезному тискать Access.
Данный запрос используется как сохраненный вложенный для массы остальных
какое ADO и RecordSet

И все же почему не используется индекс в первом виде запроса, а во втором используется
В чем разница
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084828
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate
А если переделать в параметрический запрос, и передавать с форм параметрами?


Данный запрос используется как сохраненный вложенный для массы остальных
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084833
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BoxaXP
... базовый запрос (около 5000-6000 записей) начал тормозить (выполнение более 20 сек)
...
начал переписывать запрос под условия отбора...

и все заработало (выполнение около 2 сек)

... объяснить данное поведение access
Пусть он сам объясниЦЦа - см., например, Show Plan . . . Run Faster ! , или ищите по форуму по слову SHOWPLAN.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084879
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
В запросах никогда не использую ссылки на поля формы.
Это засада. (Не явное приведение к типу)
Это самый простой способ наложить условия,
а функции использую чтобы уйти от неявного приведения типов


BoxaXP
И все же почему не используется индекс в первом виде запроса, а во втором используется
В чем разница


Уйти то вы ушли, но привидение происходит в теле запроса.
Вы в теле запроса используете внешнюю функцию!!!!!!!!!!
Отседова и тормоза.(план запроса должен быть разный)
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084886
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарисчь не понял намека про Clng-может так понятней будет
ROI

Вы в теле запроса используете внешнюю функцию!!!!!!!!!
BoxaXP
...а функции использую чтобы уйти от неявного приведения типов...
А зачем????Далеко ушли?
Явно преобразовать число в текст,а затем,уже неявно текст в число....
это значительно "ускоряет" работу запроса
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084900
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть он сам объясниЦЦа ...

Что-то с его объяснений ничего не понятно
1 запрос (с ссылками на поля формы):
--- 11 ---

- Inputs to Query -
ODBC table 'dbo_Архив'
- End inputs to Query -

453416112) Remote SQL
453416112) Remote SQL
453416112) Remote SQL

2 запрос (явным указанием границ индекса):
--- Выборка_Архив ---

- Inputs to Query -
ODBC table 'dbo_Архив'
- End inputs to Query -

453416112) Remote SQL
453416112) Remote SQL
453416112) Remote SQL

И найдите 2 отличия, а по времени выполнения разница на порядок
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084964
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP

2 запрос (явным указанием границ индекса):


запускался сразу после первого ? попробуй рестартанут аксес и начать исследования именно со 2-го запроса :)
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085035
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stu314,
Запускал с разной очередностью, с перезапуском access, с изменение и сохранением запрса с сжатием базы
в логе вообще ничего не меняется

Могу скинуть базу и клиентскую часть, если кому интересно, там ничего секретного нет,
сами поэкспериментируете
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085056
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
stu314,
Запускал с разной очередностью, с перезапуском access, с изменение и сохранением запрса с сжатием базы
в логе вообще ничего не меняется

Могу скинуть базу и клиентскую часть, если кому интересно, там ничего секретного нет,
сами поэкспериментируете

Зачем нам экспериментировать?
Вы спросили почему такая разница в скорости?
Вам ответили почему.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085101
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI

Вы спросили почему такая разница в скорости?
Вам ответили почему.


Почему JET не приводит запрос1 к виду запрос2 перед выполнением
и почему запрос1 не использует покрывающий индекс

Вопрос как добиться скорости выполнения запроса2 не переписывая
программно запрос (не меняя клиентскую часть)
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085115
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
Вопрос как добиться скорости выполнения запроса2 не переписывая
программно запрос (не меняя клиентскую часть)


ldfanate
А если переделать в параметрический запрос, и передавать с форм параметрами?

Проверял ???
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085130
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate
А если переделать в параметрический запрос, и передавать с форм параметрами?


Пробовал
PARAMETERS [Forms]![Основная]![Индекс_С] Long, [Forms]![Основная]![Индекс_По] Long;
SELECT dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка, Sum(dbo_Архив.Значение) AS [Sum-Значение]
FROM dbo_Архив
GROUP BY dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка
HAVING (((dbo_Архив.ID_наработки) Between ([Forms]![Основная]![Индекс_С]) And ([Forms]![Основная]![Индекс_по])));

Скорость выполнения запроса1 т.е. 20 сек индекс не используется
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085132
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторBoxaXP,
Between clng(...


А нужен ли тут типкаст, если параметр запроса явно объявлен Long? Может както влияет?
И потом PARAMETERS вы както странно объявили - зачем там явные ссылки прописали с восклицательными знаками? Может лучше просто статичные имена параметров, не совпадающие явно ни с чем на форме, и присваивать их тоже явно вручную (программно)?
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085137
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нужен ли тут типкаст, если параметр запроса явно объявлен Long?
Может както влияет?
Согласен, но пробовал и так и этак, без разницы

И потом PARAMETERS вы както странно объявили - зачем там явные ссылки прописали с восклицательными знаками? Может лучше просто статичные имена параметров, не совпадающие явно ни с чем на форме, и присваивать их тоже явно вручную (программно)?
То есть опять переписывать запрос? тогда упираюсь в многопользовательский режим
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085141
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему "упираетесь"? Подсовываете значение параметров программно, через QueryDef.Parameters - просто чтобы имена параметров не пересекались с именами полей форм явно.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085161
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate,
Запрос сохраненный, используется как базовый в массе других запросов
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085698
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авториспользуется как базовый в массе других запросов
всмысле как подзапрос? Так параметризовать и вышестоящий QueryDef тоже, только чтобы имена параметров были одинаковые.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086212
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate,

А разве значения параметров сохраняются в запросе?
Да и пробовал создавать запрос с параметрами, индексом он все равно не пользуется.
Использование индекса идет только если в запросе жестко прописаны скалярные величины.
Интересно можно ли access заставить использовать индекс, пробовал таблицу удалять, пере подключать - не помогло
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086248
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
ldfanate,

Интересно можно ли access заставить использовать индекс, пробовал таблицу удалять, пере подключать - не помогло

Тут раньше немного моя тема есть... Так там после назначения индекса скорость выполнения запроса очень сильно увеличилась.....
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа Access Jet
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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