![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Долгоиграющий запрос в Access [D6]
msguns © (2004-11-04 17:32:00)Запрос:
DELETE FROM NT
WHERE FID IN
(SELECT DISTINCT NT.FID FROM NT,F
WHERE NT.FID=F.TFID)
Детали:
База "местная"
В таблице NT 22тыс., в F 9,5тыс записей.
На поле FID индекса нет
Запрос выполнялся:
в SQL Exlorer > 15 мин.
в аксесе около 12 мин.
Если же этот подзапрос вложить в другой (вместо DELETE, например UPDATE) то время выполнения еще возрастает.
Это аксес такой или запрос или руки или мозги ? В IB такие штучки улетают незаметно. Неужели надо обязательно индексы ?
Vlad (2004-11-05 15:07:00) [1]
> Связующее поле неключевое, но индексное.
т.е. в дочерних таблицах по полям связки индексы есть?
Тогда странно. Но дело явно не в 70-и полях, хотя.. нужно узнать для Access существуют ли какие-то ограничения на кол-во полей.
В IB есть ограничение на одну запись - 64К
sniknik (2004-11-05 14:58:00) [2]> Причем по-моему для такого расклада скорость вполне нормальная.
и причем на парадоксе в таком же виде также с подтормаживанием работало бы.
> Т.е. я как бы не туплю ?
сделать быстрее наверняка можно (50/50).
msguns (2004-11-05 14:28:00) [3]>Vlad © (05.11.04 13:52) [20]
>На AfterScroll как я понимаю выполняется просто Close;Open детайлов?
Да, конечно.
>Курсор у всех желательно установить серверный.
Курсор коннекта серверный (был узерный, но это ничего не меняет)
Если поставить серверный у датасетов (TADOQuery), то тормоза усугубляются раза в полтора.
>Т.е. в основной таблице есть PK, а в дочках FK нету?
Связующее поле неключевое, но индексное.
>Тогда понятно, почему тормоза. Причем по-моему для такого расклада скорость вполне нормальная.
Т.е. я как бы не туплю ?
--------------------------------------------------------------------------------
Vlad (2004-11-05 13:52:00) [4]
> Да, и еще нет индексов (пока). Связь с "дочками" по прайм-ключам,
> ессно
На AfterScroll как я понимаю выполняется просто Close;Open детайлов?
Курсор у всех желательно установить серверный.
> Да, и еще нет индексов (пока). Связь с "дочками" по прайм-ключам,
> ессно
Т.е. в основной таблице есть PK, а в дочках FK нету?
Тогда понятно, почему тормоза. Причем по-моему для такого расклада скорость вполне нормальная.
msguns (2004-11-05 13:33:00) [5]>Vlad © (05.11.04 12:37) [18]
>Неужели медленно? А курсор какой, серверный или клиентский?
Да, медленно (около 0,5 сек при переходе со строки на строку)
Замена в TADOConnect тиа курсора, моды и т.д. ни к чему не привела. Правда на событии AfterScroll сидит подкачка в 2 детала, но дочерних записей у каждого мастера единицы. Основная таблица большая в "длину" (более 70 полей) - может, это влияет ?
Да, и еще нет индексов (пока). Связь с "дочками" по прайм-ключам, ессно
Vlad (2004-11-05 12:37:00) [6]
> msguns © (05.11.04 12:24) [17]
> В аксесе чего стОит одна навигация по достаточно обширному
> курсору ;((
Неужели медленно? А курсор какой, серверный или клиентский?
Ой чую грядет холивар Access vs IB ;-)
msguns (2004-11-05 12:24:00) [7]>Vlad © (05.11.04 12:00) [15]
>Да какая разница, Акцесс, Paradox или FoxPro
Парадокс все же куда побыстрее будет (вместе с биде, конечно).
В аксесе чего стОит одна навигация по достаточно обширному курсору ;((
sniknik (2004-11-05 12:06:00) [8]> поскольку оптимизации запросов как таковой нету.
ручками... пробуеш одно, другое, выбираеш подходящее.
автомат кстати, по контексту = автоматическая коробка передач. (а то вырваное чемто другим отдает)
Vlad (2004-11-05 12:00:00) [9]
> а в руках дидетанта автомат имеет явные преимущества, а
> профи в нем очень редко встречаются. ;о))
Отставить дедовщину в форуме :о)
Да какая разница, Акцесс, Paradox или FoxPro к примеру, везде скорей всего эффект один и тот же будет, поскольку оптимизации запросов как таковой нету.
sniknik (2004-11-05 11:52:00) [10]по аналогии, аксес это машина с ручной коробкой передач, а в руках дидетанта автомат имеет явные преимущества, а профи в нем очень редко встречаются. ;о))
мне наоборот в IB некоторых вещей аксеса не хватает. (когдато делал на IB связку так пришлось в одном месте для него процедуру писать, там где в аксесс легко можно в запросе все прописать) и не могу сказать что знаний нехватило (что правда, с IB не часто сталкивался) т.к. ту процедуру/ситуацию сдесь на форуме со многими обсуждали... другого выхода не нашли.
msguns (2004-11-05 11:46:00) [11]>sniknik © (05.11.04 11:42) [12]
;)))
Ну приколол, приколол.. ж)) А все же после IB на аксес как с мерса на запорожец. Сугубо ИМХО.
sniknik (2004-11-05 11:42:00) [12]> Я интересовался тем, что неужели аксес такой тормозной ?
а меня всегда интересовало почему BMW так медленно ездит? правда у меня всегда на ручнике стоит и педаль тормоза в нажатом состоянии приварена... но это ж я так, для оригинальности сделал, вовсе не хотел чтобы медленно ездило...
msguns (2004-11-05 11:24:00) [13]>Johnmen © (05.11.04 11:15) [10]
Убивать незачем. Я сделал специальную Базу, которую назвал БД Репликации. При старте репликации данные из "переиферийной" БД сначала закачиваются в буферные таблицы БДР (на которые я и повесил индексы), откуда интерполируются в специальные таблицы-раскладки, служащие для анализа и сопоставления "основной" и "вносимой" информации. Там она (инфа) просматривается и правится админом БД, после чего догружается в "основную БД", а она (База) уже, в свою очередь, уйдет "наверх". Т.е. периферийная БД не трогается, основная тоже.
В том, что индексы, конечно, помогут, и существенно, я не сомневался. Я интересовался тем, что неужели аксес такой тормозной ? Теперь мне понятно, почему разработчики некоторых прог (торговых, бухг), построенных на аксесе, настоятельно рекомендуют переходить на MS SQL (не забесплатно, ессно)
Johnmen (2004-11-05 11:15:00) [14]>msguns © (05.11.04 11:09) [8]
Создай индексы, выполни запрос, убей индексы.
Наверное, так будет быстрее, чем вообще без индексов.
Danilka (2004-11-05 11:15:00) [15][8] msguns © (05.11.04 11:09)
А [4] пробовал?
msguns (2004-11-05 11:09:00) [16]Повесил индексы. Результат:
в SQL Exlorer > 8 сек.
в аксесе 6 сек.
Мерзость в том, что прога лопатит базы, получаемые с периферии, и не содержащие индексов в нужных для репликации полях. Не я проектировал эту базу ("клоны" которой я получаю с "мест") и, соответственно, не мне делать какие-либо глобальные правки в бизнес-логике.
Выходит, что прога должна "на лету" создать нужные индексы и заюзать их при репликации. Результирующая база должны быть опять без этих индексов, т.к. отправляется в вышестоящую инстанцию в том же самом стандартном формате.
MORA (2004-11-04 18:46:00) [17]зачем спрашивать про индексы?
Создай и попробуй. Что это так долго или сложно?
Prohodil Mimo (2004-11-04 18:18:00) [18]У меня было подобное, только не для удалений, а для выборок. Время открытия составляло более 20 минут. добавил индекс - менее секунды.
Johnmen (2004-11-04 18:05:00) [19]>msguns © (04.11.04 17:55) [3]
Типа, пробуй. Потом расскажешь...
:)
sniknik (2004-11-04 18:05:00) [20]DELETE NT.*
FROM NT LEFT JOIN F ON NT.FID=F.TFID
WHERE NT.FID=F.TFID
по моему тоже самое удалит, но должен быстрее. а индексы желательны.