Иллюстрированный самоучитель по Microsoft Access 2003
Настройка таблиц
Работа с индексами
До сих пор мы не упоминали об очень важном свойстве Индексированное поле, а теперь решили посвятить ему отдельный раздел. При разработке базы данных особое внимание следует уделять именно выбору полей для индексации.
Индексация базы данных подобна созданию обычного индекса (он же предметный указатель) книги. Предположим, вам необходимо найти в книге сведения по определенной теме. Вы можете перелистывать все страницы подряд, пытаясь найти нужные данные, или же, что более разумно, заглянуть в предметный указатель и узнать номер страницы, содержащей требуемую информацию.
В Access индексы используются ради удобства не столько пользователей, сколько самой базы данных. Хотя это и не очевидно, но Access очень часто приходится искать нужные сведения в введенных пользователем данных. Допустим, был создан запрос на отображение перечня всех лечебных растений. Access может начать поиск с верхней записи таблицы Растения и постепенно перемещаться в поисках запрашиваемых данных вниз. Однако если к полю Тип добавить индекс, он будет применяться Access для нахождения нужных строк без выполнения поиска во всей таблице.
Чтобы добавить индексы в таблицу Растения и тем самым сделать работу базы данных более эффективной, выполните следующие действия.

Рис. 11.15. Окно для просмотра индексов таблицы
Вы, наверное, удивитесь, заметив, что для таблицы назначены индексы, которые мы не добавляли. Дело в том, что Access иногда самостоятельно назначает индексы, если видит в этом необходимость. К примеру, автоматически проиндексировано поле первичного ключа; также очень часто индексируются различные числовые поля.
Пользователю не рекомендуется снабжать индексами каждое поле или таблицу, потому что они несколько замедляют процесс обработки данных. На обновление индексов Access тратит много времени. Но, как правило, данные вводятся лишь один раз, а затем многократно обрабатываются. Далее приведено несколько рекомендаций относительно того, когда имеет смысл добавлять индексы к полям.
Подведем итоги…
Конечно, различные мастера и инструменты Access существенно облегчают работу пользователей с базой данных, но порой им таки приходится засучить рукава и начинать настраивать все самостоятельно. Ознакомившись с материалом, изложенным в данной главе, вы, надеемся, получили довольно полное представление о том, как:
И управлять вводимыми в поле данными путем выбора типа данных для этого поля;
Создание и использование индексов
С целью ускорения поиска и сортировки данных в любой СУБД используются индексы. Индекс является средством, которое обеспечивает быстрый доступ киданным в таблице на основе значений одного или нескольких столбцов. Индекс представляет собой упорядоченный список значений и ссылок на те записи, в которых хранятся эти значения. Чтобы найти нужные записи, СУБД сначала ищет требуемое значение в индексе, а затем по ссылкам быстро отбирает соответствующие записи. Индексы бывают двух типов: простые и составные. Простые индексы представляют собой индексы, созданные по одному столбцу. Индекс, построенный по нескольким столбцам, называется составным. Примером составного индекса может быть индекс, построенный по столбцам «Фамилия» и «Имя».
Однако применение индексов приносит не только преимущества, но и недостатки. Главным среди них является тот, что при добавлении и удалении записей или при обновлении значений в индексном столбце требуется обновлять индекс, что при большом количестве индексов в таблице может замедлять работу. Поэтому индексы обычно рекомендуется создавать только для тех столбцов таблицы, по которым наиболее часто выполняется поиск записей. Во многих СУБД (например, FoxPro) индексы хранятся в отдельных файлах и являются предметом заботы разработчиков, т. к. при нарушении индекса поиск данных выполняется некорректно. В Microsoft Access индексы хранятся в том же файле базы данных, что и таблицы и другие объекты Access. Индексировать можно любые поля, кроме МЕМО-полей, полей типа Гиперссылка и объектов OLE.
Чтобы создать простой индекс, необходимо:
Ключевое поле таблицы автоматически индексируется и свойству Индексированное поле (Indexed) присваивается значение Да (Совпадения не допускаются) (Yes (No duplicates)).
Составной индекс создается в специальном диалоговом окне. Чтобы создать составной индекс, необходимо:
По умолчанию устанавливается порядок сортировки По возрастанию (Ascending). Для сортировки данных полей по убыванию в поле Порядок сортировки (Sort Order) в окне индексов укажите значение По убыванию (Descending).
Диалоговое окно Индексы (Indexes) используется также для просмотра, изменения и удаления существующих индексов. Изменить можно:
Удаление индекса выполняется точно так же, как удаление поля в Конструкторе таблиц. Просто выделите строку с нужным индексом и нажмите клавишу или воспользуйтесь контекстным меню.
Индексированное поле
Индексированное поле можно использовать для контроля уникальности. В MS ACCESS, как и во многих других системах, при определении для индексированного поля значения свойства «уникальный индекс» в это поле не допускается ввод повторяющихся значений.
Индексированные поля, или индексы, отличаются от обычных полей тем, что для них MS ACCESS создает специальные списки, позволяющие выполнять быструю сортировку и поиск по содержимому индексированного поля. Таблица может содержать несколько индексов.
Специальный индекс называется Ключ (первичный ключ) (рис. 1. 9), идентифицирующий записи. Значения такого поля должны быть уникальными. Его наличие не обязательно, но оно так часто используется, что при отсутствии ключа MS ACCESS напоминает об этом и предлагает автоматически добавить ключевое поле.
В тех СУБД, которые поддерживают концепцию ключа (в том числе и MS ACCESS), после того как в таблице определяется ключ, по этому полю производится индексирование и запрещается ввод повторяющихся или пустых значений ключа.
При создании таблицы в режиме таблицы MS ACCESS автоматически создает поле первичного ключа с именем «Код» и типом данных «Счетчик».
Изменить или удалить первичный ключ и задать первичный ключ для таблицы, в которой его еще нет, можно в режиме конструктора.
Предполагаемый первичный ключ должен обладать указанными ниже характеристиками:
Значение данного поля или сочетания полей должно быть уникальным для каждой записи.
Поле или сочетание полей никогда не должно быть пустым или содержать значение NULL.
Значения не должны изменяться в процессе работы с БД. Свойство «Индексированное поле» определяет, надо ли создавать 
Предотвращение дублирования значений в поле таблицы с помощью индекса
Создать уникальный индекс можно предотвратить дублирование значений в поле таблицы Access. Уникальный индекс — это индекс, который требует, чтобы каждое значение индекса было уникальным.
Создать уникальный индекс можно двумя основными способами:
Заблокируйте для свойства поля «Индексированные» (без повторов) Для этого можно открыть таблицу в Конструктор. Этот способ прост, и его удобно выбирать, если нужно изменять только одно поле за раз.
Создание запрос определения данных для создания уникального индекса Это можно сделать с помощью режим SQL. Этот способ не так прост, как конструктор, но имеет преимущество: вы можете сохранить запрос определения данных и использовать его позже. Это полезно, если вы периодически удаляете и повторно создаете таблицы и хотите использовать уникальные индексы для некоторых полей.
В этой статье
Заблокируйте для свойства поля «Индексированные» (без повторов)
В области навигации щелкните правой кнопкой мыши таблицу с полем и выберите «Конструктор».
Выберите поле, которое должно иметь уникальные значения.
В области «Свойства поля» в нижней части конструктора таблицы на вкладке «Общие» установите для свойства «Индексированные» (без повторов)«Да».
Сохраните изменения в таблице.
Примечание: Если в поле для записей таблицы уже есть дубликаты, при попытке сохранить изменения таблицы с новым индексом в Access отображается сообщение об ошибке (ошибка 3022). Вам потребуется удалить повторяющиеся значения полей из записей таблицы, прежде чем можно будет установить и сохранить новый уникальный индекс.
Создание уникального индекса для поля с помощью запроса определения данных
На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
На вкладке «Конструктор» в группе «Результаты» щелкните стрелку под кнопкой «Вид»и выберите SQL «Вид».
Удалите все существующие SQL из запроса. (Скорее всего, в Access просто отобразит select, прежде чем удалять существующий текст.)
Введите или введите в SQL следующую SQL запрос:
В SQL замените переменные следующим образом:
Замените index_name именем указателя. Используйте имя, которое помогает определить, для чего используется индекс. Например, если в индексе нужно убедиться, что номера телефонов уникальны, можно назвать его unique_phone.
Замените таблицу именем таблицы, содержаной поле для индексации. Если имя таблицы имеет пробелы или специальные символы, необходимо в скобках.
Замените поле именем поля, которое нужно индексировать. Если имя поля имеет пробелы или специальные символы, его необходимо заключено в квадратные скобки.
Сохраните и закройте запрос.
Запустите запрос, чтобы создать индекс. Обратите внимание на то, что вы можете выполнить запрос из макроса с помощью макроса RunSQL.
Свойство Indexed
Область применения: Access 2013 | Access 2016
Свойство Indexed можно использовать для установки индекса одного поля. Индекс ускоряет запросы в индексированных полях, а также операции сортировки и группировки. Например, при поиске определенных имен сотрудников в поле LastName можно создать индекс для этого поля, чтобы ускорить поиска определенного имени.
Параметр
Свойство Indexed использует указанные ниже параметры.
| Setting | Описание |
|---|---|
| Нет | (По умолчанию) Нет индекса. |
| Да (допускаются совпадения) | Индекс разрешает совпадения. |
| Да (совпадения не допускаются) | Индекс не разрешает совпадения. |
Это свойство можно настроить только в разделе «Свойства поля» в представлении конструктора таблицы. Можно установить индекс одного поля, настроив свойство Indexed в разделе «Свойства поля» в представлении конструктора таблицы. Индексы нескольких полей можно установить в окне «Индексы». Чтобы открыть окно Индексы, на вкладке Конструктор в группе Показать или скрыть щелкните Индексы.
При добавлении индекса одного поля в окне «Индексы» Microsoft Access присваивает свойству Indexed для поля значение «Да».
В Visual Basic используйте метод Append ADO коллекции Indexes, чтобы создать индекс для поля.
Примечания
С помощью свойства Indexed можно искать и сортировать записи, используя одно поле в таблице. В поле могут находиться уникальные или неуникальные значения. Например, можно создать индекс в поле EmployeeID (ИД сотрудника) таблицы Employees (Сотрудники), в котором каждый ИД сотрудника уникален, или можно создать индекс для поля Name (Имя), в котором некоторые имена могут совпадать.
Нельзя индексировать поля с типами данных Memo, гиперссылка или «Поле объекта OLE».
Можно создавать любое нужное количество индексов. Индексы создаются при сохранении таблицы и автоматически обновляются при изменении или добавлении записей. Можно добавлять или удалять индексы в любой момент в представлении конструктора таблицы.
Можно указать текст, который часто используется в начале или конце имени поля (например, «шифр», «код» или «номер»), для параметра Автоиндексация при импорте и создании на вкладке Таблицы и запросы, доступной при выборе пункта Параметры в меню Средства. При импорте файлов данных, содержащих этот текст в именах полей, Microsoft Access создает индекс для этих полей.
Если первичный ключ для таблицы является одним полем, Microsoft Access автоматически присваивает свойству Indexed для этого поля значение «Да» (совпадения не допускаются).
Если нужно создать индексы нескольких полей, используйте окно «Индексы».
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.




