On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 26 , стр: 1 2 All [только новые]





Пост N: 2803
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.19 14:20. Заголовок: MIKHAIL пишет Индекс..


MIKHAIL пишет
 цитата:
Индекс как то может помочь если по нему многократные выборки делаешь...


У Андрея, это совместимость очень старого кода (что бы не править во всех прогах куски текстов wvt\gui). Один, динамический тэг для разных user (по именам файлов индекса каждому) и userов не так много.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 225
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 05.09.19 21:06. Заголовок: Pasha пишет: хоть ..


Pasha пишет:

 цитата:
хоть не оптимизируй - работает одинаково.


Ну не скажите, можно заставить работать и суперкомпьютер как доисторическую черепаху... вопрос скорее в дензнаках вложенных либо в железо либо в мозги... смотря какие возможности и предпочтения.... на мой взгляд 1С яркий тому пример

SergKis пишет:

 цитата:
что бы не править во всех прогах


ну судя по посту все же частично правит код, поэтому наверное проще вообще выкинуть построение индекса, если он одноразово используется... а если по нему выборки постоянно, без перестроения, тогда другое дело... Правильно нужно определить и использовать один общий постоянный индекс для всех, что бы ускорить выборку если оно того стоит...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2806
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.19 22:07. Заголовок: MIKHAIL пишет Правил..


MIKHAIL пишет
 цитата:
Правильно нужно определить и использовать один общий постоянный индекс для всех, что бы ускорить выборку если оно того стоит...


В том то и дело, что клиент набирает из списка условий, нужные в конкретном запросе на данный момент и далее командой индекса этот запрос выполняется, можно конечно ставить scope, filter и делать выборку, но у Андрея так со времен clipper. Возможный вариант, да и код менять не надо под новую выборку - работает и устраивает его. Говорили с Андреем на эту тему.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6417
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.09.19 22:58. Заголовок: MIKHAIL пишет: 59 т..


MIKHAIL пишет:

 цитата:
59 тыс база не большая, и если для выборки каждый раз индекс создаешь, то по сути делаешь двойную работу. Индекс как то может помочь если по нему многократные выборки делаешь...


Кол-во записей у каждой фирмы по разному. Это средняя фирма, с кол-вом абонентов 59тыс.записей.
Операция разовая, сделал и забыл. Просто привёл её в качестве примера, что код стал оптимизирован и время на операцию уменьшилось. Ранее не делал такого.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6418
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.09.19 23:18. Заголовок: MIKHAIL пишет: ну с..


MIKHAIL пишет:

 цитата:
ну судя по посту все же частично правит код, поэтому наверное проще вообще выкинуть построение индекса, если он одноразово используется... а если по нему выборки постоянно, без перестроения, тогда другое дело... Правильно нужно определить и использовать один общий постоянный индекс для всех, что бы ускорить выборку если оно того стоит...


Конечно код переделываю.
Переполз из терминалки на МиниГуи. Ускорение работы программы заметно по базе так очень.
Единственно что с окнами задержка, медленно строятся.
Карточка большая и при каждом вызове постоянно строится карточка.
В терминалке карточка быстрей строится.
Но наверное это тоже со временем решу, строить карточку постоянную при старте задачи.
Нужно 5 карточек строить, а потом показывать под разные данные.

С индексами работаю по разному. Открываю базы с постоянными индексами.
Например есть постоянный индекс по адресу, при выборке строю условный индекс по нему,
индекс создаётся в разы быстрей.
Даже на больших базах 100 тыс. записей (кол-во заявок за несколько лет) построение условного индекса без существующих индексов операция довольно быстрая на локальном компе.
Поиск по разным полям базы, включая мемо-поля.
Как сделать такой поиск без условного индекса - я даже не знаю.
400 полей в базе, что юзеру придёт в голову искать, даже не думаю.
Есть карточка с выбором условий - ищи что хочешь и ко мне не приставай.
В сетке такие операции у меня редко кто делает.

В качестве примера приводил поиск по 1 млн.записей на ЛетоДБ - там по сети всё летает.
https://abonent4.ru/letodb/

SergKis пишет:

 цитата:
да и код менять не надо под новую выборку - работает и устраивает его.


Не совсем правильно. Юзеров такой поиск устраивает. На другое он не согласен.
Зачем тогда переделывать, работа будет невостребована и просто выкинута в мусорку.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 226
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 06.09.19 15:30. Заголовок: Andrey пишет: 400 п..


Andrey пишет:

 цитата:
400 полей в базе, что юзеру придёт в голову искать, даже не думаю.


Ну если правильно понял, то набор условий FOR для индекса задает сам пользователь, на основании чего строишь индекс, а затем отобранные записи добавляешь в массив данных, после чего индекс не нужен. Если так, то нет смысла строить индекс, и потом еще раз обходить его для добавления этих записей в массив. Просто сразу делай обход всей базы данных или части на основании базового индекса с тем условием что задает пользователь. В противном случае двойная работа, а то и тройная, так как добавление записи в индекс это не одна операция...
Andrey пишет:

 цитата:
код стал оптимизирован и время на операцию уменьшилось


думаю без индекса скорость возрастет в 2-3 раза

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 26 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 10
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет