Индексация (программирование)
Индексация в языках программирования — это механизм для доступа к компоненте массива данных посредством ссылки на массив и посредством одного или более выражений, значения которых определяют позицию компоненты массива.
Индекс — элемент перечислимого множества, который указывает на конкретный элемент массива. Обычно является неотрицательным целым числом. В некоторых языках отрицательные индексы используются для отсчёта элементов в обратную сторону (начиная с конца массива).
Связанные понятия
Массив (в некоторых языках программирования также таблица, ряд, матрица) — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу или набору индексов, принимающих целые (или приводимые к целым) значения из некоторого заданного непрерывного диапазона. Одномерный массив можно рассматривать как реализацию абстрактного типа данных вектор.
Разрежённый масси́в — абстрактное представление обычного массива, в котором данные представлены не непрерывно, а фрагментарно; большинство элементов его принимают одно и то же значение (значение по умолчанию, обычно 0 или null). Причём хранение большого числа нулей в массиве неэффективно как для хранения, так и для обработки массива.
Массив Костаса может быть представлен в цифровом виде как массив из n × n чисел, где каждой точке ставится в соответствие 1, а в случае отсутствия точки в массив записывается 0. Если интерпретировать их как двоичные матрицы, эти массивы чисел имеют свойство: каждая строка и столбец имеет только одну точку на нем, поэтому они также являются матрицами перестановок. Таким образом, массивы Костаса для любого n являются подмножеством матриц перестановок порядка n.
В программировании, паралле́льный масси́в — структура данных для представления массива записей, которая физически состоит из отдельных однотипных массивов одинаковой длины для каждого из полей записи. Значения элементов с одинаковым порядковым номером в каждом массиве, логически принадлежат одной структуре. В качестве указателей на структуру используется общий индекс в параллельном массиве. Этот подход отличается от традиционного, при котором все поля структуры хранятся в соседних областях памяти.
Динамическим называется массив, размер которого может изменяться во время исполнения программы. Возможность изменения размера отличает динамический массив от статического, размер которого задаётся на момент компиляции программы. Для изменения размера динамического массива язык программирования, поддерживающий такие массивы, должен предоставлять встроенную функцию или оператор. Динамические массивы дают возможность более гибкой работы с данными, так как позволяют не прогнозировать хранимые объёмы.
Упоминания в литературе
APRP (Adaptive Pattern Recognition Process), технология адаптивного распознавания образов, производит так называемый «нечёткий поиск», при котором для поиска изображения не требуется ни словесного описания, ни ключевых слов, ни других специальных приёмов. В данной технологии под нечётким поиском понимается операция нахождения объекта по его достаточно близкому образу (например, по фотографии человека, на лице которого время оставило свои следы). Любого рода данные технология обрабатывает одинаково – в виде нулей и единиц, поэтому она равным образом применяется для индексации и нечёткого поиска как текстов (библиотека TRS), так и звукозаписей (библиотека SRS) и видеозаписей (библиотека VRS). Это обстоятельство позволяет воспользоваться для понимания алгоритмов технологии примером из области обработки текстов. Поскольку APRP работает не с ключевыми словами, а с образами, две-три изменённые (или ошибочные) буквы в слове или фразе не могут существенно изменить базовую картину текста. Таким образом, автоматически становится допустимой ошибка как во входных данных, так и в терминах запроса. Например, если мы напишем в запросе: «ЦЦЦТЕР МАРГМАСАРИТАЭЭЭЭЭЭ», имея в виду название романа Булгакова, то получим правильный ответ – «Мастер и Маргарита».
Файл robots.txt поддерживается практически всеми роботами, однако корневой каталог сервера может быть недоступен вам. В этом случае для аналогичных целей, но лишь в пределах одного документа можно использовать специальные метатэги. Они не только решают проблему запрета, но и предоставляют позитивные возможности для управления индексированием. Это более гибкое средство управления индексацией, чем robots.txt. В частности, в тэге можно дать роботу поисковой машины предписание не уходить по ссылкам на чужие серверы, например, в документах со списками ссылок:
Связанные понятия (продолжение)
Фортра́н (англ. Fortran) — первый язык программирования высокого уровня, получивший практическое применение, имеющий транслятор и испытавший дальнейшее развитие. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM. Название Fortran является сокращением от FORmula TRANslator (переводчик формул). Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана — большое количество написанных.
Система типов Си — реализация понятия типа данных в языке программирования Си. Сам язык предоставляет базовые арифметические типы, а также синтаксис для создания массивов и составных типов. Некоторые заголовочные файлы из стандартной библиотеки Си содержат определения типов с дополнительными свойствами.
В программировании, строковый тип (англ. string «нить, вереница») — тип данных, значениями которого является произвольная последовательность (строка) символов алфавита. Каждая переменная такого типа (строковая переменная) может быть представлена фиксированным количеством байтов либо иметь произвольную длину.
В компьютерных науках ку́ча — это специализированная структура данных типа дерево, которая удовлетворяет свойству кучи: если B является узлом-потомком узла A, то ключ(A) ≥ ключ(B). Из этого следует, что элемент с наибольшим ключом всегда является корневым узлом кучи, поэтому иногда такие кучи называют max-кучами (в качестве альтернативы, если сравнение перевернуть, то наименьший элемент будет всегда корневым узлом, такие кучи называют min-кучами). Не существует никаких ограничений относительно того.
Перечисляемый тип (сокращённо перечисле́ние, англ. enumeration, enumerated type) — в программировании тип данных, чьё множество значений представляет собой ограниченный список идентификаторов.
Сортировка слиянием (англ. merge sort) — алгоритм сортировки, который упорядочивает списки (или другие структуры данных, доступ к элементам которых можно получать только последовательно, например — потоки) в определённом порядке. Эта сортировка — хороший пример использования принципа «разделяй и властвуй». Сначала задача разбивается на несколько подзадач меньшего размера. Затем эти задачи решаются с помощью рекурсивного вызова или непосредственно, если их размер достаточно мал. Наконец, их решения.
Целое, целочисленный тип данных (англ. Integer), в информатике — один из простейших и самых распространённых типов данных в языках программирования. Служит для представления целых чисел.
Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путём последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие.
Поразрядная сортировка (англ. radix sort) — алгоритм сортировки, который выполняется за линейное время. Существуют стабильные варианты.
Пифагор — функционально-потоковый язык программирования, предназначенный для разработки переносимых (архитектурно-независимых) параллельных программ.
Хеш-табли́ца — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.
Сравне́ние в программировании — общее название ряда операций над па́рами значений одного типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение («истина» или «ложь»).
Интерполяционный поиск (интерполирующий поиск) основан на принципе поиска в телефонной книге или, например, в словаре. Вместо сравнения каждого элемента с искомым, как при линейном поиске, данный алгоритм производит предсказание местонахождения элемента: поиск происходит подобно двоичному поиску, но вместо деления области поиска на две части, интерполирующий поиск производит оценку новой области поиска по расстоянию между ключом и текущим значением элемента. Другими словами, бинарный поиск учитывает.
Устойчивая (стабильная) сортировка — сортировка, которая не меняет относительный порядок сортируемых элементов, имеющих одинаковые ключи.
Си (англ. C) — компилируемый статически типизированный язык программирования общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би. Первоначально был разработан для реализации операционной системы UNIX, но впоследствии был перенесён на множество других платформ. Согласно дизайну языка, его конструкции близко сопоставляются типичным машинным инструкциям, благодаря чему он нашёл применение в проектах, для которых был свойственен язык ассемблера.
Схе́ма — графическое представление определения, анализа или метода решения задачи, в котором используются символы для отображения данных, потока, оборудования и т. д.Блок-схема — распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности. Правила выполнения регламентируются ГОСТ 19.701-90 «Схемы алгоритмов, программ, данных и систем.
Опера́тор ветвле́ния (усло́вная инстру́кция, усло́вный опера́тор) — оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения.
Логи́ческий тип да́нных, или булев тип, или булевый тип (от англ. Boolean или logical data type) — примитивный тип данных в информатике, принимающий два возможных значения, иногда называемых истиной (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип данных. В некоторых языках программирования за значение истина полагается 1, за значение ложь — 0.
Множество — тип и структура данных в информатике, которая является реализацией математического объекта множество.
Область видимости (англ. scope) в программировании — часть программы, в пределах которой идентификатор, объявленный как имя некоторой программной сущности (обычно — переменной, типа данных или функции), остаётся связанным с этой сущностью, то есть позволяет посредством себя обратиться к ней. Говорят, что идентификатор объекта «виден» в определённом месте программы, если в данном месте по нему можно обратиться к данному объекту. За пределами области видимости тот же самый идентификатор может быть.
Диаграмма Варнье — Орра — особый вид блок-схемы, предназначенной для описания организации данных и процедур, разработаны Жаном-Домиником Варнье (Франция) и Кеннетом Орром (англ. Kenneth Orr). Этот метод помогает разрабатывать структуру программ путём идентификации выходных и обрабатываемых результатов с целью выявления шагов и входных комбинаций, необходимых для получения этих результатов. Простой графический метод, используемый в диаграммах Варнье — Орра, позволяет сделать очевидными как уровни.
В математическом анализе и информатике кривая Мортона, Z-последовательность,Z-порядок, кривая Лебега, порядок Мортона или код Мортона — это функция, которая отображает многомерные данные в одномерные, сохраняя локальность точек данных. Функция была введена в 1966 Гаем Макдональдом Мортоном. Z-значение точки в многомерном пространстве легко вычисляется чередованием двоичных цифр его координатных значений. Когда данные запоминаются в этом порядке, могут быть использованы любые одномерные структуры.
Индекс выражения, так же известный как основанный на функции индекс, это индекс базы данных, построенный на общем выражении, а не на одном или более столбцах. Это позволяет индексам быть определенными для общих условий запроса, которые используют информацию в таблице, но сами там не находятся.
Хеширование (англ. hashing – «превращать в фарш», «мешанина») — преобразование массива входных данных произвольной длины в (выходную) битовую строку установленной длины, выполняемое определённым алгоритмом. Функция, воплощающая алгоритм и выполняющая преобразование, называется «хеш-функцией» или «функцией свёртки». Исходные данные называются входным массивом, «ключом» или «сообщением». Результат преобразования (выходные данные) называется «хешем», «хеш-кодом», «хеш-суммой», «сводкой сообщения».
Первая нормальная форма (1НФ) — базовая нормальная форма отношения в реляционной модели данных.
Регуля́рные выраже́ния (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.
Символьный тип (Сhar) — тип данных, предназначенный для хранения одного символа (управляющего или печатного) в определённой кодировке. Может являться как однобайтовым (для стандартной таблицы символов), так и многобайтовым (к примеру, для Юникода). Основным применением является обращение к отдельным знакам строки.
Обучение дерева решений использует дерево решений (как предиктивную модель), чтобы перейти от наблюдений над объектами (представленными в ветвях) к заключениям о целевых значениях объектов (представленных в листьях). Это обучение является одним из подходов моделирования предсказаний, используемых в статистике, интеллектуальном анализе данных и обучении машин. Модели деревьев, в которых целевая переменная может принимать дискретный набор значений, называются деревьями классификации. В этих структурах.
Признаковое описание объекта (англ. feature vector) — это вектор, который составлен из значений, соответствующих некоторому набору признаков для данного объекта. Значения признаков могут быть различного, не обязательно числового, типа. Является одним из самых распространённых в машинном обучении способов ввода данных.
Очередь с приоритетом (англ. priority queue) — абстрактный тип данных в программировании, поддерживающий две обязательные операции — добавить элемент и извлечь максимум(минимум). Предполагается, что для каждого элемента можно вычислить его приоритет — действительное число или в общем случае элемент линейно упорядоченного множества.
Тип-произведение (также Π-тип, произведение типов; англ. product type) — конструкция в языках программирования и интуиционистской теории типов, тип данных, построенный как декартово произведение исходных типов; другими словами — кортеж типов, или «кортеж как тип». Использованные типы и порядок их следования определяют сигнатуру типа-произведения; порядок следования объектов в создаваемом кортеже сохраняется на протяжении его времени жизни согласно заданной сигнатуре.
Массивная нотация (англ. Array notation) — это нотация для записи больших чисел, предложенная американским математиком Джонатаном Бауэрсом (Jonathan Bowers) в 2002 году. Данная нотация является обобщением предшествующей 4-аргументной нотации (известной как операторы Бауэрса ) для произвольного числа аргументов.
Преобразование Шварца — идиома, появившаяся в языке программирования Perl, которая решает задачу эффективной сортировки списков элементов по сложным (вычисляемым) атрибутам.
Старсет — высокоуровневый язык программирования, разработанный под руководством М. М. Гилулы в Институте программных систем РАН в 1991 году.
Сжатие звука без потерь — совокупность преобразований, позволяющая эффективно сжимать звуковые данные с возможностью их полного восстановления. Как и любое сжатие без потерь, сжатие звуковых данных эксплуатирует какую-либо особенность данных. В данном случае это.
Дерево Фенвика (двоичное индексированное дерево, англ. Fenwick tree, binary indexed tree, BIT) — структура данных, позволяющая быстро изменять значения в массиве и находить некоторые функции от элементов массива. Впервые описано Питером Фенвиком в 1994 году. Дерево Фенвика напоминает дерево отрезков, однако проще в реализации.
Паска́ль (англ. Pascal) — один из наиболее известных языков программирования, используется для обучения программированию в старших классах и на первых курсах вузов, является основой для ряда других языков.
Линейное зондирование — это схема в программировании для разрешения коллизий в хеш-таблицах, структурах данных для управления наборами пар ключ – значение и поиска значений, ассоциированных с данным ключом. Схему придумали в 1954 Джин Амдал, Элейн Макгроу и Артур Сэмюэл, а проанализировна она была в 1963 Дональдом Кнутом.
Данные — поддающееся многократной интерпретации представление информации в формализованном виде, пригодном для передачи, связи, или обработки (ISO/IEC 2382-1:1993).
Четыре четверки — математическая головоломка по поиску простейшего математического выражения для каждого целого числа от 0 до некоторого максимума, используя лишь общие математические символы и четвёрки (никакие другие цифры не допускаются). Большинство версий «четырёх четверок» требует, чтобы каждое выражение содержало ровно четыре четверки, но некоторые вариации требуют, чтобы каждое выражение имело минимальное количество четверок.
В информатике алгоритм выбора — это алгоритм для нахождения k-го по величине элемента в массиве (такой элемент называется k-й порядковой статистикой). Частными случаями этого алгоритма являются нахождение минимального элемента, максимального элемента и медианы. Существует алгоритм, который гарантированно решает задачу выбора k-го по величине элемента за O(n).
О́чередь — абстрактный тип данных с дисциплиной доступа к элементам «первый пришёл — первый вышел» (FIFO, англ. first in, first out). Добавление элемента (принято обозначать словом enqueue — поставить в очередь) возможно лишь в конец очереди, выборка — только из начала очереди (что принято называть словом dequeue — убрать из очереди), при этом выбранный элемент из очереди удаляется.
В информатике, смещение внутри массива или другого объекта структуры данных представляет собой целое число, указывающее расстояние (смещение) между началом объекта и данным элементом или точкой, предположительно внутри одного и того же объекта. Концепция расстояния действительна только в том случае, если все элементы объекта имеют одинаковый размер (обычно заданный в байтах или «словах» (упорядоченный набор байтов или бит)).
Модель базы данных — тип модели данных, которая определяет логическую структуру базы данных и принципиально определяет, каким образом данные могут быть сохранены, организованы и обработаны. Наиболее популярным примером модели базы данных является реляционная модель, которая использует табличный формат.
Шифрование, сохраняющее формат (англ. format-preserving encryption, FPE) означает шифрование, в котором выходные данные (шифротекст) находятся в таком же формате, что и входные данные (открытый текст). Значение слова «формат» варьируется. Обычно подразумеваются только конечные множества, например.
Индексация (программирование)
Индексация в языках программирования — это механизм для доступа к компоненте массива данных посредством ссылки на массив и посредством одного или более выражений, значения которых определяют позицию компоненты массива [1] .
Индекс — элемент перечислимого множества, который указывает на конкретный элемент массива. Обычно является неотрицательным целым числом. В некоторых языках отрицательные индексы используются для отсчёта элементов в обратную сторону (начиная с конца массива).
Oops something went wrong:
Индекс (информационные технологии)
Для объектов данных хранящихся в массиве, отдельные объекты выбираются индексом, который обычно является неотрицательным скалярным целым числом.
Есть три способа, как элементы массива могут быть проиндексированы [1] :
0 («индекс с началом с нуля») первый элемент массива имеет индекс 0; 1 («индекс с началом с единицы») первый элемент массива имеет индекс 1; n («индекс началом с n») базисный индекс массива может быть свободно выбран. Обычно языки программирования, позволяющие «индекс началом с n», разрешают также в качестве индекса массива выбирать отрицательные значения, а также и другие скалярные типы данных, как перечисления или символы.
Массив может иметь несколько измерений, таким образом обычная практика обращаться к массиву, используя несколько индексов. Например к двумерному массиву с тремя строками и четырьмя столбцами можно было бы обратиться к элементу в 2-ом ряду и 4-ой столбце с помощью выражения: [1,3] (в языке в котором приоритет у строки) и [3,1] (в языке в котором приоритет у столбца) в случае индексом с началом с нуля. Таким образом два индекса используются для двумерных массивов, три для трехмерного массива, и n для n-мерного массива.
За деталями поддержки различных особенностей в языках программирования см. Сравнение языков программирования (массивы).
Поисковой индекс: поддержка быстрого поиска
Индекс для поиска или Поисковой индекс — вспомогательная для поиска в некотором хранилище структура данных, обеспечивающая сублинейное время поиска в этом хранилище.
Объяснение на примере
Предположим, что контейнер данных содержит N объектов данных. Прямой подход — использовать индекс объекта как его идентификатор, то есть, компания могла бы просить, чтобы его клиенты всегда упомянули свой номер счета и что число непосредственно идентифицирует запись клиента, хотя практически у номера счета должны быть дополнительные цифры, для защиты от опечаток. Это первой форма использования: целое число, которое идентифицирует элемент множества.
Однако, использование таких чисел не может быть удобным, так же, как «wikipedia.org» предпочтительнее чем тридцатидвухбитное число 3494942722 представленное в форме IP как 208.80.152.2. Наивный алгоритм был бы такой: подготовить список имен и при поиске некоторого конкретного имени, каждое имя из списка по очереди проверять, с начала до конца. В случае успешного поиска проверяется в среднем половина из них, в худшем случае проверяются все элементы, в итоге выдавая результат «не найдено»; Время работы алгоритма O(N), оно же линейное время. Так как хранилища данных нередко содержат миллионы объектов и так как поиск — достаточно частая операция, желательно изменить его работу к лучшему.
Для этого и применяют поисковой индекс: любую структуру данных, которая улучшает работу поиска.
Аспекты применения
Индекс — любая структура данных, которая улучшает работу поиска. Есть много различных структур данных, используемых с этой целью, и фактически существенная часть предмета информатики посвящена проектированию и анализу структур данных поискового индекса. Есть сложность в выборе компромиссов при выборе дизайна поискового индекса, рассматривая такие параметры как быстродействие при поиске, размер индекса, и скорость обновления индекса. Многие дизайны индекса показывают логарифмическое (O (log(N)) время работа поиска, а в некоторых приложениях даже возможно достигнуть равномерного-O (1) быстродействия.
Все базы данных содержат технологии индексации для обеспечения быстрого поиска в данных. См. Индекс (базы данных).
Еще одно специфичное, но часто встречающееся приложение — в области информационного поиска, где полнотекстовое индексирование позволяет быстро идентифицировать документы, основываясь на их текстовом содержании.
Примеры поисковых индексов
- Алгоритм двоичного поиска Быстрый поиск в сортированном списке, известный также как метод «деления пополам» или дихотомии
- Хеш-таблица Создание индекса для быстрого поиска при непоследовательных ключах хранилища
Примечания
- ↑ В языке Си, при обращении к элементу с нулевым индексом возвращает адрес начала массива, заданного именем массива (переменная со значением адреса), так как индекс здесь обозначает смещение относительно его.
- Алгоритмы поиска
Технологии программирования. Индексирование: понятие индекса, типы индексных файлов. Создание, активация и удаление индекса
1. Тема: Индексирование: понятие индекса, типы индексных файлов. Создание, активация и удаление индекса. Переиндексирование
Выполнил Булгаков Богдан Олегович
9пкс-222к-18
2. Понятие индекса и индексных файлов.
• Индекс — структура данных, которая помогает СУБД быстрее
обнаружить отдельные записи в файле и сократить время
выполнения запросов пользователей.
• Индекс в базе данных аналогичен предметному указателю в
книге. Это — вспомогательная структура, связанная с файлом и
предназначенная для поиска информации по тому же
принципу, что и в книге с предметным указателем. Индекс
позволяет избежать проведения последовательного или
пошагового просмотра файла в поисках нужных данных. При
использовании индексов в базе данных искомым объектом
может быть одна или несколько записей файла. Как и
предметный указатель книги, индекс базы данных упорядочен,
и каждый элемент индекса содержит название искомого
объекта, а также один или несколько указателей
(идентификаторов записей) на место его расположения.
3.
• Структура индекса связана с определенным ключом
поиска и содержит записи, состоящие из ключевого
значения и адреса логической записи в файле,
содержащей это ключевое значение. Файл,
содержащий логические записи, называется
файлом данных, а файл, содержащий индексные
записи, — индексным файлом. Значения в
индексном файле упорядочены по полю
индексирования, которое обычно строится на базе
одного атрибута.
• Индексные файлы (или индексы) занимают
дополнительное место на жестком диске. Если
строить индексы по всем полям таблицы и по всем
сочетаниям полей, то они (индексы) займут на
жестком диске больше места, чем сама база
данных.
4. Индексы: простые и сложные, по возрастанию и убыванию.
Индекс (или указатель) — это порядковый номер записи. При
вводе исходных данных записям присваиваются порядковые
номера по мере их ввода. Для удобства работы с записями их
желательно упорядочить по значениям какого-либо поля, т. е.
записи надо расположить или по возрастанию (по алфавиту), или
по убыванию значений поля. Таким образом, индексный файл
представляет собой
две колонки чисел: в первой колонке указываются номера,
которые получили записи при их вводе в таблицу, а во второй
колонке — номера, полученные записями после их упорядочения
по значениям поля. Если выстраивать записи по номерам второй
колонки индексного файла, то записи в таблице будут
упорядочены – по возрастанию или убыванию – по значениям
индексного поля, т. е. отсортированы.
5.
Индексы можно строить как по значениям одного
поля – простой индекс, так и по значениям
нескольких полей – сложный индекс.
Первичный индекс – это индекс, соответствующий
ключевому полю. Первичный индекс всегда один. В то
же время допускается неограниченное число
индексов для других полей.
Вторичный индекс – это индекс, созданный для
неключевого поля
Вторичный индекс также является упорядоченным
файлом, аналогичным первичному индексу. Однако
связанный с первичным индексом файл данных
всегда отсортирован по ключу этого индекса, тогда как
файл данных, связанный со вторичным индексом, не
обязательно должен быть отсортирован по ключу
индексации
6.
Индексы отличаются от первичных ключей
тем, что не требуют непременной
уникальности значений входящих в их состав
полей. Индексы устанавливаются по полям,
которые часто используются при поиске и
сортировке данных: индексы помогут
системе значительно быстрее найти нужные
данные или отсортировать их в нужной
последовательности.
7. Особенности построения индексов.
В Delphi предусмотрено два способа построения индексов:
1) с помощью утилиты Database Desktop. В этом случае индексы
строятся один раз во время проектирования приложения базы
данных и при эксплуатации базы данных нельзя добавлять новые
индексы;
2) с помощью команд. В этом случае программист
предоставляет пользователю возможность в любой момент
времени создавать и удалять индекс.
Каждый индекс принадлежит конкретной таблице. Таблица
может иметь любое количество индексов. Имена индексов
уникальные, т. е. у одной таблицы не может быть двух индексов с
одинаковыми именами. В разных таблицах имена индексов могут
повторяться.
8. Работа с индексами с помощью команд
Для создания индексов конкретных полей
таблицы служит команда CREATE INDEX:
CREATE INDEX имя_индекса ON имя_таблицы
(имя_поля)
Индекс любого поля таблицы можно создавать
программно – вызовом метода набора данных
AddIndex.
Для работы с индексами предусмотрены три
процедуры: создание индекса, определение
текущего индекса и удаление индекса.
9. Создание индекса
Компоненты Table и Query имеют метод
AddIndex, с помощью которого создается
новый индекс. Формат метода:
procedure AddIndex (const Name, Fields .
string; Options: TIndexOptions);
10. Назначение аргументов:
Name — содержит уникальное имя индекса. Имя
индекса пишется буквами английского алфавита и не
содержит символа «пробел». Вместо пробела
разрешено использование символа «подчеркивание».
Имя индекса нужно для т ого, чтобы впоследствии его
можно было уничтожить.
Fields — содержит имя поля (или полей), по
значениям которого будет построен индекс. Если
имен полей несколько, то они отделяются друг от
друга символом «точка с запятой». Разрешается
строить индекс только по физическим полям,
которые объявлены в структуре таблицы.
11.
Options — содержит одну или несколько стандартных
констант, которые определяют свойства индекса.
Допускается использование следующих констант:
— ixPrimary — задает первичный индекс;
— ix Unique — задает уникальный индекс;
— ixDescending — задет индекс по убыванию;
— ixCaseinsensitive — задает индекс,
нечувствительный к регистру букв.
Аргумент Options имеет тип TlndexOptions, и
константа (или все константы) заключаются в
квадратные скобки. Если константы отсутствуют, то все
равно надо указать пустые квадратные скобки.
Порядок следования полей внутри сложного индекса
имеет важное значение.
12. Добавление нового индекса.
Добавление нового индекса происходит в
режиме эксклюзивного доступа к таблице БД
(свойство Exclusive = True) и осуществляется
следующим методом:
procedure AddIndex (const Name, Fields:
String; Options: TIndex Options).
13.
Параметр Name определяет имя индекса, а параметр
Fields – список индексных полей.должны указываться
только поля, объявленные в структуре БД, в
противном случае будет возбуждена исключительная
ситуация. Параметр является множеством, которое
содержит значения, определяющие свойства индекса:
• ixCaseInsensitive – индекс чувствителен к регистру
букв;
• ixDescending- индексные поля сортируются по
убыванию значений;
• ixPrimary – создаётся первичный ключ;
• ixUnique – значения полей в индексе должны
однозначно определять запись.
14. Открытие и закрытие индексного файла.
В реальной работе иногда возникает
необходимость вставки в ту или иную таблицу
БД сразу множества записей. В этом случае
можно временно отключить индекс
оператором
ALTER INDEX Имя_индекса DEACTIVATE
А после завершения операции – вновь его
подключить оператором
ALTER INDEX Имя_индекса ACTIVATE
15.
Вставка с отключенным индексом (индексами)
реализуется быстрее, т.к. каждая единичная
вставка не вызывает изменения индекса
(индексов). Кроме того, последующее
включение индекса ведёт к его перерасчёту и
способствует его оптимизации.. но в условиях
многопользовательской работы отключение и
повторное включение индекса проблематично,
т.к. с индексом одновременно могут работать
два и более пользователя. На практике для
улучшения производительности индекса
администратор БД должен время от времени его
уничтожать оператором
DROP INDEX Имя_индекса
16. Активация индекса.
Для одной таблицы можно создать несколько
индексов. В каждый момент времени один из
них можно сделать текущим, т.е. активным.
Даже при существовании нескольких
индексов таблица может не иметь текущего
индекса. Текущий индекс важен, например,
при выполнении поиска и сортировки
записей набора данных компонента Table
17. Удаление индекса и индексного файла.
Удаление существующего индекса происходит в
режиме эксклюзивного доступа к таблице БД и
осуществляется следующим методом:
procedure DeleteIndex (const Name: String).
Параметр Name определяет имя удаляемого индекса.
Удаление индекса выполняется при эксклюзивном
доступе к таблице, т.е. свойство Exclusive должно
иметь значение True. При попытке удаления
несуществующего индекса возбуждается
исключительная ситуация raise Exception.
18. Переиндексирование: назначение и команда.
Для смены текущего индекса компоненты Table и
Query имеют свойство:
property IndexName: string;
После замены текущего индекса набор данных,
размещенный в компоненте Table (или в Query), будет
автоматически отсортирован в соответствии с
установленным индексом.
Если имя индекса не известно, то процедуру замены
индекса можно производить, по именам полей,
входящих в индекс. Для этих целей компоненты Table
и Query снабжены свойством:
property IndexFieldNames: string;
19.
• Если индекса с указанными именами полей
не существует, то возбуждается
исключительная ситуация raise Exception.
• В Delphi индекс, построенный по полю
первичного ключа, имени не имеет.
• Поэтому второй способ замены текущего
индекса следует использовать в тех случаях,
когда текущим индексом надо сделать
первичный ключ (первичный индекс).