Uzhast писал(а) 26. Октября 2007 :: 09:34:orefkov писал(а) 26. Октября 2007 :: 09:29:Это ты бы лучше не позорился.
Ну перешел ты в файле на нужную запись.
На кой черт мне записи в ПОРЯДКА ДОБАВЛЕНИЯ ЗАПИСЕЙ В ТАБЛИЦУ?
Мне надо дальше двигатся в порядке ИНДЕКСА.
И как ты найдешь, с какого места в ИНДЕКСЕ надо возобновить обход?
Только либо перебрав весь индекс, ища нужную запись,
либо сформировав ключ этой записи, найти этот ключ в индексе, и двигать по индексу, ища нужную запись по номеру.
Орефков, ну это уже не смешно. Честное слово. Ну ты же всегда был умным мужиком. А сейчас мне тебе приходится объяснять элементарные вещи. Мне же неудобно. Ты же вроде авторитет, а простых вещей не знаешь. Может, лучше в личку перенести обсуждение?
Я перехожу по физическому номеру записи на нужную. Далее я делаю SKIP в нужном направлении. Как работает SKIP? Вот так:
Цитата:Remarks
If the table has a master controlling index tag or index file, SKIP moves the record pointer to the record determined by the index sequence.
Вкуриваешь? Фактически, номер записи - это закладка. Вот и все.
Ты мануалы-то не только читай, мозг включай иногда
Полезно иногда подумать, как же работает это волшебство.
Номер записи - это закладка в файле, но никак не в ИНДЕКСЕ.
Так что скорее всего, унутре все происходит так:
Когда ты делаешь GOTO номер, фокс позиционирует указатель в файле-ДАННЫХ на нужную запись.
После этого, если для таблицы установлен порядок обхода по индексу, ему просто НЕОБХОДИМО перепозиционировать указатель в файле-ИНДЕКСЕ на узел, СООТВЕТСТВУЮЩИЙ ЭТОЙ ЗАПИСИ В ИНДЕКСЕ.
Иначе откуда он будет делать дальнейший SKEEP ?
Как это делает Фокс?
Есть такая инфа?
Скорее всего он формирует индексный ключ записи, на которую он перешел в ФАЙЛЕ, и ищет этот ключ в ИНДЕКСНОМ ФАЙЛЕ. При этом, если ключ не уникален, ему приходится НЕМНОЖКО ПРОСКАНИРОВАТЬ индекс в пределах этого ключа, чтобы точно найти тот узел, в котором номер записи соответствует номеру записи, на который он перешел в файле.
А это оптимальней всего делать, когда неуникальные ключи в индексе еще дополнительно упорядочены по номеру записи.
Что собственно, меня и интересовало.
И что собственно, мы видим на практике - действительно, неуникальные ключи в индексном файле идут в порядке физических номеров. И так как мои логические построения привели к тому-же выводу, что и существуюет на практике, то в них скорее всего большая доля истины, чем в бездумном цитировании мануалов.
PS
И скореевсего поэтому ключ в cdx-файле лежит в виде строки
СамКлюч + (Четыре символа - номер записи в hex-нотации)