Semenalidery.com

IT Новости из мира ПК
115 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Индексированное поле в access

Создание и использование индексов

С целью ускорения поиска и сортировки данных в любой СУБД используются индексы. Индекс является средством, которое обеспечивает быстрый доступ киданным в таблице на основе значений одного или нескольких столбцов. Индекс представляет собой упорядоченный список значений и ссылок на те записи, в которых хранятся эти значения. Чтобы найти нужные записи, СУБД сначала ищет требуемое значение в индексе, а затем по ссылкам быстро отбирает соответствующие записи. Индексы бывают двух типов: простые и составные. Простые индексы представляют собой индексы, созданные по одному столбцу. Индекс, построенный по нескольким столбцам, называется составным. Примером составного индекса может быть индекс, построенный по столбцам «Фамилия» и «Имя».

Однако применение индексов приносит не только преимущества, но и недостатки. Главным среди них является тот, что при добавлении и удалении записей или при обновлении значений в индексном столбце требуется обновлять индекс, что при большом количестве индексов в таблице может замедлять работу. Поэтому индексы обычно рекомендуется создавать только для тех столбцов таблицы, по которым наиболее часто выполняется поиск записей. Во многих СУБД (например, FoxPro) индексы хранятся в отдельных файлах и являются предметом заботы разработчиков, т. к. при нарушении индекса поиск данных выполняется некорректно. В Microsoft Access индексы хранятся в том же файле базы данных, что и таблицы и другие объекты Access. Индексировать можно любые поля, кроме МЕМО-полей, полей типа Гиперссылка и объектов OLE.

Чтобы создать простой индекс, необходимо:

  1. Открыть таблицу в режиме Конструктора.
  2. Выбрать поле, для которого требуется создать индекс.
  3. Открыть вкладку Общие (General) и выбрать для свойства Индексированное поле (Indexed) значение Да (Допускаются совпадения) (Yes (Duplicates OK)) или Да (Совпадения не допускаются) (Yes (No duplicates)) (рис. 2.24).

Ключевое поле таблицы автоматически индексируется и свойству Индексированное поле (Indexed) присваивается значение Да (Совпадения не допускаются) (Yes (No duplicates)).

Составной индекс создается в специальном диалоговом окне. Чтобы создать составной индекс, необходимо:

  1. Открыть таблицу в режиме Конструктора.
  2. На панели инструментов Конструктор таблиц (Table Design) нажать кнопку Индексы (Indexes.)
  3. В первой пустой строке (рис. 2.25) поля Индекс (Index Name) ввести имя индекса.

По умолчанию устанавливается порядок сортировки По возрастанию (Ascending). Для сортировки данных полей по убыванию в поле Порядок сортировки (Sort Order) в окне индексов укажите значение По убыванию (Descending).

Диалоговое окно Индексы (Indexes) используется также для просмотра, изменения и удаления существующих индексов. Изменить можно:

  • название индекса в поле Индекс (Index Name);
  • поле таблицы, соответствующее данному индексу, выбрав новое поле из списка в поле Имя поля (Field Name);
  • порядок сортировки в поле Порядок сортировки (Sort Order); П свойства данного индекса в нижней части окна (рис. 2.26):
    • Ключевое поле (Primary) определяет, является ли индексированное поле ключевым;
    • Уникальный индекс (Unique) определяет, должно ли быть каждое значение в этом поле уникальным;
    • Пропуск пустых полей (Ignore Nulls) определяет, включаются или не включаются в индекс записи с пустым (Null) значением данного поля.

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

Иллюстрированный самоучитель по Microsoft Access 2003

Настройка таблиц

Работа с индексами

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

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

В Access индексы используются ради удобства не столько пользователей, сколько самой базы данных. Хотя это и не очевидно, но Access очень часто приходится искать нужные сведения в введенных пользователем данных. Допустим, был создан запрос на отображение перечня всех лечебных растений. Access может начать поиск с верхней записи таблицы Растения и постепенно перемещаться в поисках запрашиваемых данных вниз. Однако если к полю Тип добавить индекс, он будет применяться Access для нахождения нужных строк без выполнения поиска во всей таблице.

Чтобы добавить индексы в таблицу Растения и тем самым сделать работу базы данных более эффективной, выполните следующие действия.

  1. Откройте таблицу Растения в режиме конструктора.
  2. Щелкните на поле ЛатинскоеИмя.
  3. Укажите для свойства Индексированное поле значение Да (Допускаются совпадения). В результате для поля будет создан индекс; кроме того, в это поле можно будет ввести значение, которое уже присутствует в некоторых других записях таблицы.
  4. Щелкните на поле ИмяКаталога.
  5. Укажите для свойства Индексированное поле значение Да (Допускаются совпадения).
  6. Для просмотра всех индексов таблицы выберите команду Вид › Индексы или щелкните на кнопке Индексы, расположенной на панели инструментов. На экране отобразится окно, показанное на рис. 11.15. Как видите, для индексов задаются отдельные свойства; неопытным пользователям желательно оставить значения этих свойств без изменений.
  7. Закройте окно Индексы и сохраните таблицу.


Рис. 11.15. Окно для просмотра индексов таблицы

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

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

  • Добавляйте индекс к любому полю, используемому для связи двух таблиц (индексы такого рода обычно создаются самой Access).
  • Добавляйте индекс к любому полю, которое содержит часто используемые, а следовательно, часто искомые, данные.
  • Добавляйте индекс к любому часто сортируемому полю.
  • Укажите для свойства Индексированное поле значение Да (Совпадения не допускаются) для любого поля, каждая запись таблицы которого будет содержать уникальное значение. При этом Access автоматически добавляет индекс к полю первичного ключа (ключевому полю).

Подведем итоги…

Конечно, различные мастера и инструменты Access существенно облегчают работу пользователей с базой данных, но порой им таки приходится засучить рукава и начинать настраивать все самостоятельно. Ознакомившись с материалом, изложенным в данной главе, вы, надеемся, получили довольно полное представление о том, как:

И управлять вводимыми в поле данными путем выбора типа данных для этого поля;

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

Создание индекса для одного поля

Создание и использование индекса

Для увеличения производительности

Если необходимо постоянно выполнять поиск в таблице или сортировать записи по определенному полю, можно ускорить эти операции, создав индекс для этого поля. В таблицах Microsoft Office Access 2007 индексы используются точно так же, как предметные или именные указатели в книгах. Чтобы найти данные, Office Access 2007 проверяет местоположение этих данных по индексу. В некоторых случаях, например при определении первичного ключа, Access формирует индекс автоматически. В других случаях самому пользователю может потребоваться создание индекса.

Общие сведения об индексах.Индексы способствуют более быстрым поиску и сортировке записей в Microsoft Office Access 2007. В индексе хранится местоположение записей на основе одного или нескольких полей, которые были выбраны для индексирования. После того как Access получает сведения о местоположении данных, эти данные могут загружаться путем перемещения в нужное местоположение. Благодаря этому использование индекса гораздо эффективнее просмотра всех записей для поиска необходимых данных.

Выбор полей для индексирования.Можно создавать индексы, основанные на одном или нескольких полях. В основном требуется индексировать поля, в которых часто осуществляется поиск, сортируемые поля и поля, объединенные с полями в других таблицах, что часто используется в запросах по нескольким таблицам. Индексы ускоряют поиск и построение запросов, однако они могут привести и к снижению производительности при добавлении или обновлении данных. При вводе данных в таблицу, содержащую один или несколько индексов, приложение Access должно обновлять индексы при каждом добавлении или изменении записи. Добавление записей с помощью запроса на добавление или с помощью импортирования записей также будет происходить более медленно, если таблица-получатель содержит индексы.

Примечание. Первичный ключ таблицы индексируется автоматически. Индексирование полей с типом данных «Объект OLE» и «Вложение» невозможно. Индексировать другие поля следует в тех случаях, когда одновременно выполняются следующие условия:

— типом данных поля является «Текстовый», «Поле Memo», «Числовой», «Дата/время», «Счетчик», «Денежный», «Логический» или «Гиперссылка»;

— предполагается поиск значений в поле;

— предполагается сортировка значений в поле;

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

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

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

В составной индекс можно включить до 10 полей.

Создание индекса

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

Индексированное поле в access

Инструкция CREATE INDEX
Создает новый индекс на существующей таблице.

Примечание. Ядро базы данных Microsoft Jet при работе с базами данных производителей, отличных от Microsoft, не поддерживает использование инструкции CREATE INDEX (за исключением создания псевдоиндекса в связанной таблице ODBC) и любых других инструкций языка описания данных (DDL).
Вместо этого воспользуйтесь методом Create для объектов DAO. Дополнительные сведения см. в разделе «Заметки».

Синтаксис
CREATE [ UNIQUE ] INDEX индекс
ON таблица (поле [ASC|DESC][, поле [ASC|DESC], . ])
[WITH < PRIMARY | DISALLOW NULL | IGNORE NULL >]

Инструкция CREATE INDEX включает с себя следующие компоненты.

Аргумент Описание
индекс Имя создаваемого индекса
таблица Имя существующей таблицы, в которой будет создан индекс
поле Имя одного или нескольких полей для индексации. Чтобы создать индекс по одному полю, укажите имя поля в круглых скобках после имени таблицы. Чтобы создать индекс по набору полей, укажите имена всех полей, которые должны войти в индекс. Чтобы создать убывающий индекс, используйте зарезервированное слово DESC; в противном случае создается возрастающий индекс

Замечания
Чтобы запретить появление дублирующихся значений в одном или нескольких индексированных полях, используйте зарезервированное слово UNIQUE.

Чтобы определить условия для значений данных, используйте предложение WITH. Можно выполнить следующие действия.

Запретить появление пустых записей в одном или нескольких индексированных полях для новых записей с помощью параметра DISALLOW NULL.
Предотвратить индексирование записей со значениями Null в одном или нескольких индексированных полях с помощью параметра IGNORE NULL.
Определить одно или несколько индексированных полей в качестве первичного ключа с помощью зарезервированного слова PRIMARY. Первичный ключ уникален, поэтому можно опустить зарезервированное слово UNIQUE.
Инструкция CREATE INDEX может быть использована для создания псевдоиндекса в связанной таблице источника данных ODBC, таком как Microsoft SQL Server, в которой еще нет индекса. Для создания псевдоиндекса не нужно разрешения или доступа на удаленный сервер, а на удаленном сервере никак не отразится наличие псевдоиндекса. Для связанных и оригинальных таблиц можно использовать один и тот же синтаксис. Особенно полезным является создание псевдоиндекса в таблице, которая будет использоваться преимущественно для чтения.

Чтобы добавить индекс по одному полю или по набору полей в таблице, используйте также инструкцию ALTER TABLE. Чтобы удалить индекс, созданный с помощью инструкции ALTER TABLE или CREATE INDEX, можно использовать инструкцию ALTER TABLE или DROP.

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

MS Access: оптимизация индекса

Допустим, у нас есть таблица [оценки], содержащая несколько значений на дату и на фонд:
-FundId
-ValDate
— Значение 1
-Значение2.

Первичный ключ, очевидно, FundId+ValDate.
Я также индексировал поле ValDate, так как я часто запрашиваю значения на определенную дату.

Мой вопрос: Должен ли я также создать определенный индекс для FundId, или MsAccess достаточно умен, чтобы использовать первичный ключ при запросе на определенный FundId ?

2 Ответа

Первичный ключ-это очевидно FundId + ValDate

В каком порядке? И как вы получаете доступ к своим данным?

Компонент Access Database Engine использует PRIMARY KEY в качестве кластеризованного индекса. Если бы ты это сделал

PRIMARY KEY (FundId, ValDate)

тогда вы получите другой порядок на диске, чем если бы вы сделали это

PRIMARY KEY (ValDate, FundId)

Чтобы показать порядок столбцов в PK при использовании Access GUI (если вы не использовали SQL DDL для создания PRIMARY KEY ): в режиме конструктора таблиц нажмите кнопку индексы или включите индексы в меню Вид. В списке будут показаны все индексы, а для нескольких полей-порядок, который можно изменить.

Порядок столбцов в кластеризованном индексе важен, поскольку он определяет один и единственный физический индекс для таблицы, так сказать, ваш индекс uber.

(ValDate, FundId) предпочтет BETWEEN (или эквивалентные) предикаты или GROUP BY на ValDate , например, запросы диапазона дат, возвращающие несколько средств.

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

Теперь у вас должно сложиться впечатление, что с проблемами производительности связано много переменных: как был определен PK, генерация ключевых значений, как часто вы сжимаете файл, ваша стратегия блокировки (например, уровень страницы или уровень строки?), высокая или низкая окружающая среда деятельности, etc. Не говоря уже о характере запросов, которые вы выполняете к таблице (например, по дате или по ключу?)

вы уверены, что Access поддерживает кластеризацию индексы ?

Конечно, и вот некоторые заметные статьи о MSDN:

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

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

Как оптимизировать запросы в Visual Basic » в этой статье предполагается, что вы используете компонент Microsoft Jet database engine. По мере роста вашей базы данных она будет фрагментироваться. Сжатие записывает все данные в таблице в непрерывные страницы на жестком диске, повышая производительность последовательного сканирования.»

Информация о производительности запросов в базе данных Access «при сжатии базы данных можно ускорить выполнение запросов. При сжатии базы данных записи таблицы реорганизуются таким образом, чтобы они располагались на соседних страницах базы данных, упорядоченных по первичному ключу таблицы. Это повышает производительность последовательного сканирования записей в таблице, поскольку теперь для извлечения нужных записей требуется прочитать только минимальное количество страниц базы данных.»

Нет необходимости ставить индекс на столбец FundId. Доступ достаточно умен, чтобы использовать PK в описанной вами ситуации.

BTW, является ли FundId уникальным? Если это так, то нет необходимости включать и ValDate.

Похожие вопросы:

У меня есть небольшая дилемма о рабочем задании, которое я получил. Я являюсь помощником студента неполный рабочий день в этом учреждении, где мой босс хочет, чтобы я fix базы данных MS-Access у нас.

Мне нужно использовать Python ORM с базой данных MS-Access (в Windows). Мои первые поиски на самом деле не увенчались успехом : SQLAlchemy : нет поддержки MS Access в двух последних версиях. DAL от.

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

Мы всегда используем индекс для оптимизации DB. Но что такое индексная оптимизация? в чем заключается сложность индексации? Нужна ли нам оптимизация индекса? Как нам это сделать в mysql году? Это.

У нас есть клиент, который имеет требование создать экспорт данных в базах данных MS Access. В настоящее время планируется использовать платформу Azure в качестве сервиса, который не позволит.

Может ли кто-нибудь помочь мне отсортировать и упорядочить диаграмму Pivot в MS-Access, пожалуйста. Я мог бы сделать это легко в MS-Excel, но не в MS — Access. Мне нужен разрыв между каждой задачей.

как открыть файл ms access 2007 в ms access 2003

Я пытаюсь вставить запись в таблицу с DAO (в MS-Access) и делаю это, я получаю ошибку 3022 (которая указывает, что уникальный индекс нарушен). Ошибка верна, так как на самом деле запись.

Я только начал использовать MS Access в качестве базы данных, и теперь моя проблема заключается в том, как отобразить мою фамилию и имя в сочетании как Name . Вот мой код MySQL: CONCAT(Surname, ‘.

Есть ли способ открыть отчет MS Access 2007, не открывая сам MS Access DB? У меня есть несколько отчетов в моем MS Access DB, который расположен в своего рода серверном компьютере. Некоторым людям.

Читать еще:  Class point c
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector