![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Задолбали индексы в Paradox e [D5, Paradox]
Weare © (2002-06-21 17:27:00)Подскажите, пожалуйста. У меня часто при работе программы выскакивает "Index is out of date". В Desktope это исравлял, но ведь хочеться, чтобы программа сама это исправляла.(кстати почему вообще это так часто появляется)
Тогда я решил вставить в код программы перегенерацию индексов:
DataModule2.Users.Exclusive:=True;
DataModule2.Users.Open;
Check(dbiRegenIndexes(DataModule2.Users.Handle));
Для этой таблицы все нормально отрабатывает, а для другой пишет:
"Must use baseorder for this operation".Подскажите, в чем тут дело и есть ли другое решение проблемы.
Заранее огромное спасибо.
VAleksey (2002-06-26 08:18:00) [1]Table1.AddIndex("NewIndex", "CustNo;CustName", [ixUnique, ixCaseInsensitive,ixNonMaintained]);
VAleksey (2002-06-26 08:17:00) [2]Table1.AddIndex(..,.., nonMaintained);
Что-то типа такого
MEgor (2002-06-26 08:03:00) [3]to VAleksey © (26.06.02 07:23)
И каким образом все это должно выглядеть ?
VAleksey (2002-06-26 07:23:00) [4]
> MEgor © (26.06.02 06:54)
Тогда тебе надо программным способом создавать необновлянмые индексы.
MEgor (2002-06-26 06:54:00) [5]to alexanderK (25.06.02 09:40)
А мне Primary в данном случае не нужен.
Мне нужны два не уникальных индекса. Один используется при расчете(поиск идет), второй при отображении данных на экране в удобном отсортированном виде.
MEgor (2002-06-26 06:50:00) [6]Anatoly Podgoretsky (25.06.02 09:56)
Что значит явно не обслуживаемые ?
Добавляю запись - будь добр перестройся.
Weare (2002-06-25 14:49:00) [7]Спасибо.
VAleksey (2002-06-25 14:42:00) [8]
> Ведь некоторые клиент-серверные СУБД по скорости
что-то я таких не видел :)
конечно высокой.
Здесь разница в том что локальные таблицы у тебя на винте и скорость их обработки зависит от параметров компьютера, скорость обработки данных на сетевом диске зависит от скорости работы сети. Так же от скорости сети зависит работа с клиент - серверными БД. В общих чертах преимущество использования клиент - сервер вместо простого расшаривания диска по сети это уменьшение нагрузки на сеть за счет обработки данных на сервере.
Lolik (2002-06-25 14:36:00) [9]Обгоняют только при правильно составленных запросах, которые выполняются на стороне сервера и результатом работы которых будет небольшая выборка, которая и перешлется клиенту по сети. Логика приложения другая.
Weare (2002-06-25 14:30:00) [10]to VAleksey
>
> Так наверное такой скорости как при работе с локальнами
> данными трудно добиться даже от клиент-сервер :).
В смысле, такой высокой или медленной? Ведь некоторые клиент-серверные СУБД по скорости обгоняют локальные.
Lolik (2002-06-25 14:27:00) [11]Если перестроение индексов при входе в программу, то открываться будет долго и при одновременном входе будут проблемы, можно вынести регенерацию индексов в отдельное приложение. Если все правильно настроено, а индексы валятся часто, то возможно нужна разъяснительная работа с пользователями на предмет выхода из программы, а затем выключения компьютера (была у нас такая проблема с одним закачиком). Можно при открытии проги писать в файл или регистр признак, при нормальном закрытии его убирать, если при входе признак уже стоит выдавать пользователю сообщение, что он некорректно вышел из программы в прошлый раз и может потерять введенные данные. Можно делать принудительную регенерацию индексов, но в сетевом варианте это не проходит. Мы ограничились страшным сообщением желтыми буквами на красном фоне и помогло.
VAleksey (2002-06-25 14:17:00) [12]
> Weare © (25.06.02 14:02)
Так наверное такой скорости как при работе с локальнами данными трудно добиться даже от клиент-сервер :).
А притензий по надежности к парадоксу у меня лично никаких.
Lolik © от (25.06.02 12:20) все правильно сказал.
Weare (2002-06-25 14:02:00) [13]to Lolik
Спасибо, я вроде все так и делаю. Значит у меня оптимальная скорость открытия.
Хотя еще более медленнее стало открываться, когда я вставил перегенерацию индексов и упаковывание таблиц в код программы. А то индексы слишком часто слетали (проблема в самом верху записана).Что скажешь?
Lolik (2002-06-25 13:43:00) [14]При просмотре все будет ок, правда в Grid-е запись изменится только после прорисовки Grid-а. При попытке редактироавания сообщит, что запись заблокированна таким то пользователем,и не войдет в режим редактирования.
Скорость открытия увеличить можно только уменьшив обьем того, что открывается, т.е. как можно меньше индексов и как можно короче их сделать, если индексов много, то первичный ключ автоинкрементный, у тебя вроде так и сделано. Держать таблицы
на DataModule и открывать их один раз при входе в приложение.
Никаких фильтров по большим базам, особенно установленных в дизайне. Если уж нужно фильтровать, то лучше добавить индекс и использовать SetRange, ограничивая выборку, а затем включать фильтр, если необходимо. На скорую руку ничего больше в голову не прходит.
Если позволяют средства клиента, то можно использовать терминального клиента W2000, тогда приложение будет работать на сервере и трафика по сети практически не будет, правда аппаратные требования к серверу возрастают - по крайней мере 20 Мб оперативки на каждого пользователя и хороший проц, а лучше 2.
Weare (2002-06-25 12:54:00) [15]to Lolik
Спасибо.
Может подскажешь, какие последствия одновременного обращения к одной записи с разных машин, ведь здесь идет блокировка на уровне записи. И еще, как можно увеличить скорость открытия базы по сети, а то у меня сильно долго грузится.
Lolik (2002-06-25 12:20:00) [16]Если к твоей базе данных обращается, кто-то с той же машины, на которой находится база данных (предполагаю, что это админ), то в настройках BDE обязательно на этой машине должно быть установлено LOCAL SHARE = True. Иначе не происходит запись в .lck
файлы данных о блокированных в данный момент записях, летят индексы.
PS
Уже 6 лет используем Paradox в своих многопользовательских системах, индексы разваливаются довольно редко в основном по двум причинам 1. жесткий диск на ладан дышит и сбоит 2. в однопользовательском режиме выключают комп при открытых таблицах либо напруга пропадает.
Не спорю, что SQL решения надежней и современней, но не всегда оправдывается...
Anatoly Podgoretsky (2002-06-25 09:56:00) [17]MEgor © (25.06.02 02:56)
У тебя явно не обслуживаемые индексы иди в DBD и исправь
alexanderK (2002-06-25 09:40:00) [18]MEgor> Еще. у одной таблицы два индекса.
MEgor> Добавляю в нее порядка 500 тыс. записей - ни один индекс MEgor> не изменился, т.е. оба как были 2 кб., так и остались.
Так будет если у таблицы не назначен Primary
Evyshka (2002-06-25 09:22:00) [19]У меня эта же проблема В день восстанавливаю индексы около 2-х раз (Или сообщениу Index out of date или все виснет), база очень большая Может ли быть проблема из за частой сортировки
или при выполнении запроса?
VAleksey (2002-06-25 08:47:00) [20]
> Weare © (24.06.02 14:11)
нет. просто бывают проблемы с этим кэщированием при многопользовательском доступе к таблице, пожтому надо кэш почаще сбрасывать.