Почему сжатие базы данных Access 2000 изменяет порядок записей в таблице? - PullRequest
0 голосов
/ 11 июня 2009

Как говорит вопрос. В таблице не определен первичный ключ. Другие таблицы в базе данных не изменяются после сжатия, а также не определены первичные ключи.

Ответы [ 3 ]

2 голосов
/ 11 июня 2009

"Если в таблице существует первичный ключ, сжатие повторно сохраняет записи таблицы в порядке их первичного ключа. Это обеспечивает эквивалент необслуживаемых кластерных индексов и значительно расширяет возможности механизма чтения базы данных Microsoft Jet. более эффективный. "

ACC2000: дефрагментация и сжатие базы данных для повышения производительности

"Новый метод сжатия. Сжатие базы данных теперь приводит к тому, что индексы сохраняются в формате кластеризованного индекса. Хотя кластеризованный индекс не поддерживается до следующего сжатия, производительность все еще улучшается. Это отличается от Microsoft Jet 2. х, где строки данных были сохранены так, как они были введены. Новый компактный метод с кластеризованным ключом основан на первичном ключе таблицы. Новые введенные данные будут в порядке времени. "

Новые функции в Microsoft Jet версии 3.0

То, что ни одна из этих статей не сообщает вам, - это то, что необходимо соблюдать: если в столбцах NOT NULL существует ограничение UNIQUE (или уникальный индекс), то оно будет использоваться вместо PRIMARY KEY. Что я не смог выяснить, так это то, как ACE / Jet выбирает единицу, если в таблице несколько ограничений UNIQUE: сначала создано? Порядковый номер первого столбца? Порядковый номер первого NOT NULL столбца? Ваше предположение так же хорошо, как и мое.

1 голос
/ 13 июня 2009

Столы не имеют порядка. Таблица данных может, но это не таблица, а объект пользовательского интерфейса, используемый для отображения таблицы.

Если вы хотите контролировать порядок своей таблицы, используйте оператор SQL с предложением ORDER BY.

Вы не должны использовать табличное представление в приложении.

Если у вас нет приложения и вам не нравится порядок по умолчанию, задайте свойство ORDER BY в таблице данных и сохраните его или напишите запрос в нужном порядке.

Но вам нужно отказаться от идеи, что таблицы имеют какой-либо порядок вообще. Простая идея полностью противоречит основам SQL и теории множеств. Вам не важно, в каком порядке записи хранятся в физической базе данных.

0 голосов
/ 11 июня 2009

Без первичного ключа Access может свободно переставлять строки таблицы так, как считает нужным. Я предполагаю, что эффект зависит от модели использования таблицы. Когда вы удаляете строку, база данных просто помечает ее как удаленную. При сжатии он освобождает пространство, перезаписывая удаленные строки не удаленными. Если таблица имеет первичный ключ, то база данных будет стараться сохранить порядок строк во время этого процесса (что, следовательно, является гораздо более дорогой операцией); в противном случае это не так.

...