Автор | Сообщение |
|
| постоянный участник
|
Пост N: 6370
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.07.19 23:38. Заголовок: REINDEX ...
Всем привет ! Не пользовался этой командой вообще. Делал закрытие индексов и создание нового индекса. А как сделать REINDEX на драйвере CDX без закрытия индексов ? Для простоты я использую один файл - один индекс. Так привык давно делать, да и удобнее по Dbsetorder() переключаться. Делаю так: SET AUTOPEN ON USE ( cDbf ) ALIAS TEST SHARED NEW // подключается автоматом test6.cdx OrdSetFocus('ALL') Dbsetorder(1) .... // cUser := "1-user", "2-user" и т.д. cIndx := GetStartUpFolder() + "\test6." + cUser + '.cdx' DELETEFILE(cIndx) // обязательно SELECT TEST INDEX ON RECNO() TAG CODE1 TO (cIndx) FOR &cFilter ADDITIVE // условный индекс OrdSetFocus('CODE1') Dbsetorder(2) GO TOP ... Пытаюсь потом в программе сделать: SELECT(oBrw:cAlias) nOrder := INDEXORD() IF nOrder == 2 // перестроить индекс REINDEX // строка 897 ENDIF Вылетает с ошибкой: Error DBFCDX/1023 Exclusive required: W:\HB_Project\Tsb_Basic\Demo6\test6.dbf --------------------------------- Stack Trace --------------------------------- Called from ORDLISTREBUILD(0) Called from RECNOREFRESH(897) in module: demo6.prg Called from CHANGEWINBROWSE(1037) in module: demo6.prg Called from (b)MAIN(47) in module: demo6.prg
|
|
|
Ответов - 26
, стр:
1
2
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 2803
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.19 14:20. Заголовок: MIKHAIL пишет Индекс..
MIKHAIL пишет цитата: | Индекс как то может помочь если по нему многократные выборки делаешь... |
| У Андрея, это совместимость очень старого кода (что бы не править во всех прогах куски текстов wvt\gui). Один, динамический тэг для разных user (по именам файлов индекса каждому) и userов не так много.
|
|
|
|
| |
Пост N: 225
Зарегистрирован: 05.10.06
|
|
Отправлено: 05.09.19 21:06. Заголовок: Pasha пишет: хоть ..
Pasha пишет: цитата: | хоть не оптимизируй - работает одинаково. |
| Ну не скажите, можно заставить работать и суперкомпьютер как доисторическую черепаху... вопрос скорее в дензнаках вложенных либо в железо либо в мозги... смотря какие возможности и предпочтения.... на мой взгляд 1С яркий тому пример SergKis пишет: цитата: | что бы не править во всех прогах |
| ну судя по посту все же частично правит код, поэтому наверное проще вообще выкинуть построение индекса, если он одноразово используется... а если по нему выборки постоянно, без перестроения, тогда другое дело... Правильно нужно определить и использовать один общий постоянный индекс для всех, что бы ускорить выборку если оно того стоит...
|
|
|
|
| постоянный участник
|
Пост N: 2806
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.19 22:07. Заголовок: MIKHAIL пишет Правил..
MIKHAIL пишет цитата: | Правильно нужно определить и использовать один общий постоянный индекс для всех, что бы ускорить выборку если оно того стоит... |
| В том то и дело, что клиент набирает из списка условий, нужные в конкретном запросе на данный момент и далее командой индекса этот запрос выполняется, можно конечно ставить scope, filter и делать выборку, но у Андрея так со времен clipper. Возможный вариант, да и код менять не надо под новую выборку - работает и устраивает его. Говорили с Андреем на эту тему.
|
|
|
|
| постоянный участник
|
Пост N: 6417
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.09.19 22:58. Заголовок: MIKHAIL пишет: 59 т..
MIKHAIL пишет: цитата: | 59 тыс база не большая, и если для выборки каждый раз индекс создаешь, то по сути делаешь двойную работу. Индекс как то может помочь если по нему многократные выборки делаешь... |
| Кол-во записей у каждой фирмы по разному. Это средняя фирма, с кол-вом абонентов 59тыс.записей. Операция разовая, сделал и забыл. Просто привёл её в качестве примера, что код стал оптимизирован и время на операцию уменьшилось. Ранее не делал такого.
|
|
|
|
| постоянный участник
|
Пост N: 6418
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.09.19 23:18. Заголовок: MIKHAIL пишет: ну с..
MIKHAIL пишет: цитата: | ну судя по посту все же частично правит код, поэтому наверное проще вообще выкинуть построение индекса, если он одноразово используется... а если по нему выборки постоянно, без перестроения, тогда другое дело... Правильно нужно определить и использовать один общий постоянный индекс для всех, что бы ускорить выборку если оно того стоит... |
| Конечно код переделываю. Переполз из терминалки на МиниГуи. Ускорение работы программы заметно по базе так очень. Единственно что с окнами задержка, медленно строятся. Карточка большая и при каждом вызове постоянно строится карточка. В терминалке карточка быстрей строится. Но наверное это тоже со временем решу, строить карточку постоянную при старте задачи. Нужно 5 карточек строить, а потом показывать под разные данные. С индексами работаю по разному. Открываю базы с постоянными индексами. Например есть постоянный индекс по адресу, при выборке строю условный индекс по нему, индекс создаётся в разы быстрей. Даже на больших базах 100 тыс. записей (кол-во заявок за несколько лет) построение условного индекса без существующих индексов операция довольно быстрая на локальном компе. Поиск по разным полям базы, включая мемо-поля. Как сделать такой поиск без условного индекса - я даже не знаю. 400 полей в базе, что юзеру придёт в голову искать, даже не думаю. Есть карточка с выбором условий - ищи что хочешь и ко мне не приставай. В сетке такие операции у меня редко кто делает. В качестве примера приводил поиск по 1 млн.записей на ЛетоДБ - там по сети всё летает. https://abonent4.ru/letodb/ SergKis пишет: цитата: | да и код менять не надо под новую выборку - работает и устраивает его. |
| Не совсем правильно. Юзеров такой поиск устраивает. На другое он не согласен. Зачем тогда переделывать, работа будет невостребована и просто выкинута в мусорку.
|
|
|
|
| |
Пост N: 226
Зарегистрирован: 05.10.06
|
|
Отправлено: 06.09.19 15:30. Заголовок: Andrey пишет: 400 п..
Andrey пишет: цитата: | 400 полей в базе, что юзеру придёт в голову искать, даже не думаю. |
| Ну если правильно понял, то набор условий FOR для индекса задает сам пользователь, на основании чего строишь индекс, а затем отобранные записи добавляешь в массив данных, после чего индекс не нужен. Если так, то нет смысла строить индекс, и потом еще раз обходить его для добавления этих записей в массив. Просто сразу делай обход всей базы данных или части на основании базового индекса с тем условием что задает пользователь. В противном случае двойная работа, а то и тройная, так как добавление записи в индекс это не одна операция... Andrey пишет: цитата: | код стал оптимизирован и время на операцию уменьшилось |
| думаю без индекса скорость возрастет в 2-3 раза
|
|
|
Ответов - 26
, стр:
1
2
All
[только новые]
|
|