Это результат моих тестов, проведенных с MDB A2003, а не ACCDB A2007:
98,304 IndexTestEmpty.mdb
131,072 IndexTestNoIndexesNoData.mdb
11,223,040 IndexTestNoIndexes.mdb
15,425,536 IndexTestPK.mdb
19,644,416 IndexTestPKIndexes1.mdb
23,838,720 IndexTestPKIndexes2.mdb
24,424,448 IndexTestPKCompound.mdb
28,041,216 IndexTestPKIndexes3.mdb
28,655,616 IndexTestPKCompoundIndexes1.mdb
32,849,920 IndexTestPKCompoundIndexes2.mdb
37,040,128 IndexTestPKCompoundIndexes3.mdb
Имена должны быть довольно понятны, я думаю. Я использовал запрос на добавление с помощью Rnd (), чтобы добавить 524 288 записей поддельных данных, что сделало файл 11 МБ. Все индексы, которые я создал для других полей, были неуникальными. Но если вы видите, что составной 4-колоночный индекс увеличил размер с 11 МБ (без индексов) до более чем 24 МБ. Размер PK в первом столбце увеличился только с 11 МБ до 15,4 МБ (конечно, с использованием поддельных МБ, т. Е. Как производителей жестких дисков).
Обратите внимание, как каждый индекс с одним столбцом добавляет примерно 4 МБ к размеру файла. Если учесть, что 4 столбца без индексов составляли 11 МБ, то, исходя из моего комментария выше, это кажется правильным, то есть каждый индекс должен увеличивать размер файла примерно на объем данных в индексируемом поле. Я удивлен, что кластерный индекс сделал это тоже - я думал, что кластерный индекс будет использовать меньше места, но это не так.
Для сравнения, не-PK (то есть некластеризованный) уникальный индекс в первом столбце, начиная с IndexTestNoIndexes.mdb, точно такого же размера, как база данных с первым столбцом в качестве PK, поэтому экономия места отсутствует из кластерного индекса вообще. В случае, если возможно, что порядковая позиция индексированного поля может изменить ситуацию, я также попробовал уникальный индекс только для второго столбца, и он получился точно такого же размера.
Теперь я не внимательно прочитал ваш вопрос и пропустил поле Валюта, но если я добавлю его в неиндексированную таблицу и таблицу с составным индексом и заполню ее случайными данными, я получу следующее:
98,304 IndexTestEmpty.mdb
131,072 IndexTestNoIndexesNoData.mdb
11,223,040 IndexTestNoIndexes.mdb
15,425,536 IndexTestPK.mdb
15,425,536 IndexTestIndexUnique2.mdb
15,425,536 IndexTestIndexUnique1.mdb
15,482,880 IndexTestNoIndexes+Currency.mdb
19,644,416 IndexTestPKIndexes1.mdb
23,838,720 IndexTestPKIndexes2.mdb
24,424,448 IndexTestPKCompound.mdb
28,041,216 IndexTestPKIndexes3.mdb
28,655,616 IndexTestPKCompoundIndexes1.mdb
28,692,480 IndexTestPKCompound+Currency.mdb
32,849,920 IndexTestPKCompoundIndexes2.mdb
37,040,128 IndexTestPKCompoundIndexes3.mdb
Точки сравнения:
11,223,040 IndexTestNoIndexes.mdb
15,482,880 IndexTestNoIndexes+Currency.mdb
24,424,448 IndexTestPKCompound.mdb
28,692,480 IndexTestPKCompound+Currency.mdb
Итак, поле валюты добавило еще 4,5 МБ, а его индекс добавил еще 4 МБ. И если я добавлю неуникальные индексы во 2-е, 3-е и 4-е длинные поля, база данных 41 338 832 и увеличится в размере чуть менее 12 МБ (или ~ 4 МБ на дополнительный индекс).
Итак, это в основном копирует ваши результаты, нет? И у меня получился файл одинакового размера, грубо говоря.
Ответом на ваш вопрос является ИНДЕКСЫ, хотя очевидно, что в формате ACCDB A2007 явно больше служебной информации, поскольку я наблюдал увеличение размера только на 20 МБ, а не на 30 МБ.
Одна вещь, которую я заметил, состояла в том, что я мог реализовать индекс, который увеличил бы файл, затем удалил бы индекс и сжал его, и он вернул бы точно такой же размер файла, как и раньше, так что вы должны иметь возможность возьмите одну копию вашей базы данных и поэкспериментируйте с тем, как удаление индексов влияет на размер вашего файла.