Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Размер индексного файла / 21 сообщений из 21, страница 1 из 1
02.03.2005, 18:57
    #32942263
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Есть таблица - 4 поля, примерно 1000 записей
Проиндексирована по всем полям
Посмотрел - Бог ты мой, а индекс-то аж пятиметровый!
Че это с ним?
...
Рейтинг: 0 / 0
02.03.2005, 19:15
    #32942298
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
угу таблица 4 записи ширина маленькая
индекс наверно составной
если не ошибаюсь то упрошенно
файл индекса - значение индекса + номер записи -> размер
отсюда вопрос на чем хотите сэкономить
...
Рейтинг: 0 / 0
02.03.2005, 19:44
    #32942332
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
не пользуй REINDEX, а сначала удали теги DELETE TAG ... и занова создай INDEX ON ... TAG ..
...
Рейтинг: 0 / 0
02.03.2005, 20:05
    #32942359
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
А каков размер таблицы без индекса ?
С уважением, Алексей.
...
Рейтинг: 0 / 0
02.03.2005, 20:11
    #32942369
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
182 кб
Да я посмотрел - такая фигня во всех таблицах! Сначала они были сделаны как свободные, все проиндексированы, занесены кое какие данные...
А потом я решил их в базу засунуть. Может из-за этого?
...
Рейтинг: 0 / 0
02.03.2005, 23:14
    #32942520
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Какая версия FoxPro (включая номер Service Pack)?

Какие выражения индекса (приведи команду INDEX)?

Что ты подразумеваешь под словом "индекс"? Структурный, мультииндекс, простой?
...
Рейтинг: 0 / 0
02.03.2005, 23:33
    #32942532
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
А по-моему где-то в программе частенько встречается слово "index"...
...
Рейтинг: 0 / 0
03.03.2005, 01:00
    #32942574
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Hi Jimy!

> Че это с ним?

1) Возможно мусор накопился (на foks.wikis.com несколько тем по этому
есть) - тогда совет Hel!Riser подойдёт.
2) В VFP7 алгоритм создания индексов таков, что они получаются в 1.5-2 раза
больше чем во всех других версиях (зато не так сильно распухает при
вставках/модификациях данных, и более сбалансированные деревья получаются ->
ищется быстрее).
3) Размер файла индекса в общем рассчитать невозможно - чем более
"различные" значения в индексируемых полях - тем больше индексный файл. Если
же все значения идентичны, размер файла будет минимальный.
4) В общем размер индексного файла зависит от длинны ключа (которая по
максимуму достигает 240 для COLLATE=MACHINE и 120 для остальных).

Если бы ты привёл структуры таблиц (размеры полей и т.п.) и структуры
индексов (индексные выражения) то мы могли бы проверить у себя :) В принципе
исходя из максимальной длинны ключа и числа записей (я так понимаю 1000 это
число ВСЕХ записей, включая удалённые), получаем что для набора 5 Мб должно
быть порядка 20 индексов с максимальной длинной ключа, а в таблице абсолютно
несовпадающие записи. Это конечно маловероятно для таблицы из 4-х полей :)
Так что скорее всего именно в "мусоре в cdx" и заключена проблема.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
03.03.2005, 08:18
    #32942700
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
OPEN DATABASE c:\polina\data\data1 EXCLUSIVE
USE c:\polina\data\data1!podraz IN 1
INDEX ON ALLTRIM(podraz)tag podraz

......
USE c:\polina\data\data1!mat IN 6
SELECT 6

iNDEX ON ALLTRIM(izm)tag izm
iNDEX ON ALLTRIM(mat)tag mat
iNDEX ON (price)tag price
iNDEX ON ALLTRIM(chet)tag chet

Это кусок из запускающей программы. Там еще много таблиц и все индексируются
...
Рейтинг: 0 / 0
03.03.2005, 10:36
    #32942976
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Про версию FoxPro ты почему-то скромно умолчал. Ну, ладно.

FoxPro не поддерживает индексы с переменным выражением ключа. Т.е. функция AllTrim() в данном случае означет, что в индексном ключе будут удалены ведущие пробелы и все выражение дополниться пробелами справа до длины соответствующего поля.

Это в принципе некорректная задача для индекса. Нельзя так делать. "Прижимать" данные к левому краю (удалять ведущие пробелы) надо на стадии ввода/модификации данных. Взваливать это на индекс - создавать себе проблемы.

Сделай простые индексные ключи

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
USE c:\polina\data\data1!podraz IN  1  
INDEX ON podraz TAG podraz

......
USE c:\polina\data\data1!mat IN  6 
SELECT  6 

iNDEX ON izm TAG izm
iNDEX ON mat TAG mat
iNDEX ON price TAG price
iNDEX ON chet TAG chet
...
Рейтинг: 0 / 0
03.03.2005, 11:18
    #32943147
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
и фс:е же, перед созданием индексоф по совету Владимира Максимова выполни предварительна DELETE TAG ALL
...
Рейтинг: 0 / 0
03.03.2005, 19:35
    #32944851
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
А по-моему где-то в программе частенько встречается слово "index"...

Как минимум - раз уж всё так тупо каждый раз индексируется, то перед USE сделай ERASE индексному файлу!
...
Рейтинг: 0 / 0
03.03.2005, 23:10
    #32945011
bobit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
ВладимирМСделай простые индексные ключи
... и перепиши все поиски-розыски-выборки.
А тут и подвопрос к вопросу:
если у таблицы индекс построен с функцией к полю (тот же alltrim), то будет ли столь же быстро использование, например, такого выбора:
select * izm=allt(кое-чего) ... когда уберём функцию?
Если честно, то я так и не понял этого Рашмора. И, вполне возможно, ошибаюсь, но без функции притормаживать будет. Так думаю.
...
Рейтинг: 0 / 0
03.03.2005, 23:23
    #32945018
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
bobit ВладимирМСделай простые индексные ключи
... и перепиши все поиски-розыски-выборки.
А тут и подвопрос к вопросу:
если у таблицы индекс построен с функцией к полю (тот же alltrim), то будет ли столь же быстро использование, например, такого выбора:
select * izm=allt(кое-чего) ... когда уберём функцию?
Если честно, то я так и не понял этого Рашмора. И, вполне возможно, ошибаюсь, но без функции притормаживать будет. Так думаю.
Нет. Не так.

У тебя стоит условие поиска

izm=allt(кое-чего)

Оптимизатор видит, что в левой части стоит имя поля (или функция от полей таблицы). Он сканирует заголовок всех открытых индексных файлов соответствующей таблицы на предмет поиска точно такого же выражения ключа индекса. Если такой индекс найден, то, скорее всего, он и будет использован. Исключением являются случаи когда:

Индекс имеет FOR-условие

Индекс имеет тип UNIQUE

Индекс создан в режиме сортировки (IDXCollate()) отличном от текущего режима сортировки (SET COLLATE)

Если выполняется хотя бы одно из этих условий, то такой индекс НЕ используется.
...
Рейтинг: 0 / 0
03.03.2005, 23:48
    #32945031
bobit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
То есть select * from polina where allt(izm)=allt(кое-что) into cursor вторая_полина - это правильно для случая iNDEX ON ALLTRIM(izm) tag izm для первой полины с полем izm?
...
Рейтинг: 0 / 0
04.03.2005, 00:56
    #32945076
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
bobitТо есть select * from polina where allt(izm)=allt(кое-что) into cursor вторая_полина - это правильно для случая iNDEX ON ALLTRIM(izm) tag izm для первой полины с полем izm?
Ну, ты и выражаешься Сам хоть понял, что спросил? Настоятельно советую перечитывать свой вопрос в предпросмотре перед отправкой.

Еще раз. Если у Вас выражение

where allt(izm)=allt(кое-что)

И индекс

iNDEX ON ALLTRIM(izm) tag izm

То, да, этот индекс будет использоваться оптимизатором.

Но! Здесь пожидает серьезная "засада". Как я уже писал ранее, FoxPro не поддерживает переменную длину ключа. Т.е. он сам, по собственной инициативе, добавит в выражении индекса концевые пробелы. Как следствие, результат сравнения

allt(izm)=allt(кое-что)

может дать неожиданные результаты. Ведь не будет происходит вычисление allt(izm), а будет просто сравниваться значение allt(кое-что) со значением индексного ключа. Напоминаю, в значении ключа есть концевые пробелы.

Впрочем, в данном конкретном случае это не окажет никакого влияния. Результат будет корректным. Чтобы понять почему, почитайте описание настройки SET ANSI, которая отвечает за правила сравнения символьных строк в выражении Select-SQL.

Да, до некоторой степени, судить о том, используются индексы или нет можно через команду SYS(3054). Примерно так:

Код: plaintext
1.
2.
3.
SYS( 3054 , 1 )
select * from polina where allt(izm)=allt(кое-что) into cursor вторая_полина
SYS( 3054 , 0 )

В основном окне FoxPro будет отображена информация об использованных индексах и уровне оптимизации.
...
Рейтинг: 0 / 0
04.03.2005, 02:28
    #32945091
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Hi Redrik!

> Как минимум - раз уж всё так тупо каждый раз индексируется, то перед
> USE сделай ERASE индексному файлу!

ERASE низя - тогда не откроется dbf - надо DELETE TAG ALL - но это чисто
теоретически - ибо практически ПЕРЕИНДЕКСИРОВАТЬ ПРИ КАЖДОМ ЗАПУСКЕ - это
бессмысленно. Если такое кривое железо что летят индексы - так надо железо
лечить, а не извращения в программе делать.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
04.03.2005, 11:11
    #32945641
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Igor Korolyov
ERASE низя - тогда не откроется dbf - надо DELETE TAG ALL
Это почему не откроется??? Отлично откроется, если табличку "освободить"! REMOVE табличку, ERASE индекс, ADD и USE табличку... И индексируем сколько влезет!

DELETE TAG не сделаешь без USE, a USE при убитом индексе не сработает!

Igor Korolyovно это чисто теоретически - ибо практически ПЕРЕИНДЕКСИРОВАТЬ ПРИ КАЖДОМ ЗАПУСКЕ - это бессмысленно.
Совершенно верно! Но иногда... ;-)

Igor KorolyovЕсли такое кривое железо что летят индексы - так надо железо лечить, а не извращения в программе делать.
Хм... А вот бывают клиенты, для которых "лечение" железа - непосильная задача!
Ну и что с такими делать? Например, стоИт "несчастье", чтоб платежки печатать и перезапускается само по себе в произвольный момент времени...
Ну и пусть индексируется при каждом запуске! ;-)
И тут без ERASE никак нельзя! :-)
...
Рейтинг: 0 / 0
05.03.2005, 18:09
    #32948847
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Hi Redrik!

> Это почему не откроется??? Отлично откроется, если табличку
> "освободить"! REMOVE табличку, ERASE индекс, ADD и USE табличку... И
> индексируем сколько влезет!

А потом починить как-то dbc в котором были записи о этой таблице, вернуть
длинные имена полей, триггера, RI, рулесы... В общем совершить 1001
совершенно лишнее действие...
Только не надо тут говорить о том что у тебя ничего этого не используется
(тем боле что я всё-равно не поверю), и потому тебе так лучше делать -
всё-же мы рассматриваем общий случай.

> DELETE TAG не сделаешь без USE, a USE при убитом индексе не
> сработает!

Да, но достать из дистрибутива, или из архива этот cdx (пускай даже
"пустой" - т.е. созданный при отсутствии в таблице записей) и подставить
его - после чего достаточно лишь REINDEX сделать - заметно проще и
эффективнее.

> Совершенно верно! Но иногда... ;-)

"Иногда" подразумевет "не в main.prg".

> Хм... А вот бывают клиенты, для которых "лечение" железа -
> непосильная задача!

Клиент не способный заплатить пару сотен тугриков за более-менее нормальное
железо - это не наш клиент :) Я бы не стал работать за 10$ и даже за 100$ за
АРМ. Имеется в виду не "вообще", а решать проблемы КОНКРЕТНОГО
пользователя... А если он готов нормально заплатить, то и железо сможет
купить которое не "перегружается само по себе".

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
05.03.2005, 19:01
    #32948908
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Igor KorolyovА потом починить как-то dbc в котором были записи о этой таблице, вернуть длинные имена полей, триггера, RI, рулесы... В общем совершить 1001 совершенно лишнее действие...
Только не надо тут говорить о том что у тебя ничего этого не используется
(тем боле что я всё-равно не поверю), и потому тебе так лучше делать -
всё-же мы рассматриваем общий случай.
:-)

Igor KorolyovДа, но достать из дистрибутива, или из архива этот cdx (пускай даже "пустой" - т.е. созданный при отсутствии в таблице записей) и подставить его - после чего достаточно лишь REINDEX сделать - заметно проще и эффективнее.
Совершенно согласен! Лучший способ! ;-)

Igor KorolyovКлиент не способный заплатить пару сотен тугриков за более-менее нормальное железо - это не наш клиент :) Я бы не стал работать за 10$ и даже за 100$ за АРМ. Имеется в виду не "вообще", а решать проблемы КОНКРЕТНОГО пользователя... А если он готов нормально заплатить, то и железо сможет купить которое не "перегружается само по себе".
Так то оно так... Вряд ли кто-нибудь работает за $100 за АРМ...
Но есть же и клиенты типа дом-интернат... Деньги-то, конечно, вещь значительная, но не решающая... Надо от них иногда отвлекаться... ;-)
...
Рейтинг: 0 / 0
07.03.2005, 00:00
    #32949340
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер индексного файла
Hi Redrik!

Если тебе не платят ничего, то ты совершенно в праве делать лишь то, что
посчитаешь нужным - IMHO это совершенно логично. И тогда ни о каких
"прихотях клиентов" речи вообще не идёт.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Размер индексного файла / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]