Работа с индексами в памяти |
Когда происходит считывание информации из БД в память, никакие индексы не создаются. Реально создание индексов происходит в момент попытки выборки данных по этому индесу. При создании очередного индекс в памяти предыдущий индекс в памяти не удаляется, а остается, для возможности последующего использования.
При выборке данных без индекса, записи выдаются в том порядке, в котором они были считаны из БД. Если, например, на таблицу-источник было наложено ограничение, реализовавшееся по индексу, то записи будут физически расположены в таблице в памяти в порядке выборки по этому индексу.
Стоит обратить внимание на то, что при операциях модификации update и insert система ВСЕГДА проверяет уникальность модифицируемых значений по уникальным индексам. Таким образом, эти индексы всегда существуют.
Если после использования некоторые индексы не нужны, то их можно удалить при помощи функции mtDropIndex.
В дальнейшем, при первой операции навигации по этому индексу, он будет создан заново. Таким же образом можно отключить проверку уникальных индексов при операциях update, insert. Если же после этого происходит попытка навигации по отключеному уникальному индексу и возникает неуникальное значение ключа, то выдается ошибка с кодом tsDuplicateKey.
Программисту предоставляется возможность, создать индекс в памяти не только тот, что был описан в словаре, но и произвольный. Для создания такого индекса используется функция mtSetTableOrder. Таким образом, мы получаем аналог внешней выгрузки, но в памяти.
Атлантис 5.00.04.