Текущий архив: 2002.07.15;
Скачать: CL | DM;
ВнизБред сивой кобылы........................ Найти похожие ветки
← →
Adventure (2002-06-13 16:58) [0]Я перелопатил свою базу из Paradox в InterBase! ( для тех кто еще помнит меня) <br>
ПАРНИ! Интербейзчики!!!!
TBase.Locate("SOME_FIELD",DATA,[loCaseInsensitive]) - 30 сек!!!! при индексированной базе по "SOME_FIELD"
<br>
TBase.Append - 25 мин!
У меня может с головой плохо?
← →
koks (2002-06-13 17:20) [1]Переход на клиент-сервер требует переработки логики приложения (кроме переноса данных). Вместо Locate надо использовать SELECT WHERE, а вместо Append использовать INSERT INTO...VALUES.
Все эти громадные паузы из-за большого фетчинга (перекачки данных с сервера на клиента туда-сюда), которые используются если работать с базой "в лоб", как с Dbase/Paradox и ьтем более при использовании компонентов типа Table. Переходи на SQL - идеологию и на компоненты типа Query: Передаешь серверу запрос (SQL-строку) - получаешь от него данные(небольшую выборку) - обрабатываешь данные...
Но, это все общие рассуждения - может еще проблема в спец. установках... пусть подскажут лучшие спецы чем я.
← →
kaif (2002-06-13 17:23) [2]Техника работы с сервеными базами иная. Никаких Append и Locate!
Вставка делается с помощью Insert. Лучше, чтобы это не была TTable или что-то подобное, а TQuery (или что-то подобное). Иначе, прежде чем сделать Append в большой таблице, TTable вытягивает все записи в себя (FetchAll). Locate вообще рыщет по набору, точно так же предварительно вытянутому в TTable при помощи Fetch. Поэтому вместо Locate c loCaseInsensitive люди используют SELECT FROM .. WHERE UPPER(...) = ...(опять TQuery!).
В общем, стиль Paradox не годится для IB.
Многое придется менять.
← →
Adventure (2002-06-13 17:31) [3]Что-то у меня животик разболелся ........ :-(((((((((
← →
koks (2002-06-13 17:33) [4]Тогда пивка...
← →
Reindeer Moss Eater (2002-06-13 17:34) [5]К тому же Locate не использует индексы
← →
Adventure (2002-06-13 17:37) [6]Сейчас пойду нажрусь пива, а завтра ВСЕ переделывать!
Народ, если что, буду за советом бегать..... к вам.
Удачи всем!
← →
Fareader (2002-06-13 18:05) [7]Станет легче если перестанешь использовать TTable, а начнешь юзать TQuery
← →
AlexA (2002-06-14 00:51) [8]>kaif © (13.06.02 17:23)
Вопросик не совсем в тему:
>Locate вообще рыщет по набору, точно так же предварительно >вытянутому в TTable при помощи Fetch
Если известно что данные не изменяются в справочнике, использовать Locate для IB это укладывается в логику SQL
← →
Deniz (2002-06-14 06:22) [9]2Adventure ©
А что за компонент такой TBase? Чей он? И через что работает?
← →
VAleksey (2002-06-14 08:49) [10]Мож спецовые компоненты для IB помогут ? Например TIBTable. Тогда и сильно логику приложения не надо будет менять.
← →
MCFire (2002-06-15 12:27) [11]А я бы посоветовал использовать FibPlus компоненты особенно TFibDataSet клёвая вещь
← →
kaif (2002-06-15 13:53) [12]> 2 AlexA © (14.06.02 00:51)
>Если известно что данные не изменяются в справочнике, >использовать Locate для IB это укладывается в логику SQL
Ничего не имею против. Для того Locate и существует. Если в справочнике не более 1000 записей и он редко меняется, может быть оправдано изредка вытягивать справочник на клиент и бегать по нему с помощью Locate.
Но так как у человека Locate занимает 30 сек, я и решил, что речь идет не о справочнике, а о какой-то очень большой таблице.
Кстати, ничто не мешает использовать Locate компонентов типа TQuery. Потому что кто-то мог бы подумать, что Locate есть только у TTable.
То есть TQuery позволяет сразу ограничить набор нужной выборкой, а потом можно перемещаться по нему с помощью Locate. Иногда это очень удобно, например, если нужно встать на ту же запись в наборе после того, как переоткрыл весь набор.
← →
bander_log (2002-06-19 10:28) [13]Раньше тоже работал под DBase но выросли базы и перешел на SQL. Логика запросов меняется молностью. Кстати операции вставки удаления и обновления записи лучше (максимальная скорость и меньше трахаться с типом данных) через хранимые процедуры и компонент SP.
← →
Turalyon (2002-06-19 11:10) [14]>> Reindeer Moss Eater (13.06.02 17:34)
Вырезка из Help-а по TIBCustomDataSet.Locate
[кусь]
Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.
[/кусь]
Так что Locate всеже использует индексы...
На счет FetchAll точно не уверен, но скорее всего да, он его делает...
А если такие траблы со временем происходят... тоскорее всего именно из за этого самого FetchAll по этому лучше делать как и советует народ, пользуйся компонентами с закладки InterBase и делай все через SQL запросы...
Страницы: 1 вся ветка
Текущий архив: 2002.07.15;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.01 c