Работать с БД и
не затронуть тему индексов невозможно. Однако она настолько обширна, что одним
постом её не покрыть. Здесь лишь определимся с терминологией и рассмотрим общее
положение дел.
Что мы знаем про
индексы? Они ускоряют поиск данных и занимают дополнительное пространство в
базе. Если первое видно сразу, то со вторым несколько сложнее.
В "АС-Библиотека-3", некоторые
обычные таблицы (например, Demo_01003 Demo_01003X) также выполняют роль
индексов. Будем называть их программными индексами, а обычные - системными.
Поскольку программные индексы это обычные таблицы, они, в свою очередь,
проиндексированы системными. Так называемые "док" индексы (в
терминологии АС-Библиотека-3) содержат данные 090 полей, поэтому это не совсем индексы.
Какова ситуация с
индексами в "АС-Библиотека-3"? В случае с SQL, процедура с
незатейливым названием sp_spaceused отвечает на этот вопрос:
EXEC sp_spaceused @updateusage = N'TRUE';
Вот скриншот с
рабочей базы
Если перевести в
проценты, то 33% занимают данные, 66% - индексы и чуть больше 1% свободно. То
есть, на каждый байт информации приходится два байта информации о её
размещении! Естественно sp_spaceused "замеряет" только системные
индексы, так как программные, для неё, это обычные таблицы. Если база небольшая
то проблемы нет, а если за гигабайт, то с этим надо что-то делать.
В случае с базой
"Access" подобный запрос мне неизвестен. Однако можно поступить
следующим образом. Сжать базу. Сделать копию. И, тупо, поудалять все индексы из
копии. Сжать её и сравнить размер с исходным. У меня получилось сокращение на
57%. Результат близкий, хотя не все системные индексы были удалены, а только
наиболее "ёмкие". А также удалены все программные (так было проще - с
каждым программным индексом удаляется как минимум два системных). Кроме того,
очевидно, что в Access и SQL системные индексы организованы по-разному. Если
надумаешь поэкспериментировать самостоятельно, вместо Access рекомендую
пользоваться менеджером БД вроде DATABASE.NET
(http://fishcodelib.com/Database.htm). Кстати он и сжимать умеет.
Почему всё так?
Дело в том, что изначально, в АС-3, на всякий случай, проиндексировано ВСЁ! И
возиться с индексами ("затачивать") придётся тебе (если ты админ).
Так обстоят дела в любой относительно сложной системе на основе СУБД. К
сожалению одной "волшебной кнопки" здесь нет. Слишком сильно всё
завязано на условия эксплуатации. Хорошая новость в том, что работа с
программными индексами в АС-Библиотека-3 организована весьма неплохо. А про
системные и говорить нечего. Главное помнить, что индексы это не информация.
Это информация о размещении информации. Поэтому они возобновимы после удаления.
Создавая и удаляя индексы, мы можем ускорить работу и увеличить размер базы при
этом, и наоборот. Главный вопрос состоит в том, какие индексы использует АС-3 в
работе, а какие являются балластом.
В SQL базах,
система индексирования гораздо более развитая по сравнению с Access и
возможностей по анализу и настройке больше.
И в конце. У меня
нет никакой информации о том, чтобы кто-то использовал скрипт проверки БД (см.
пост выше). Поэтому он не развивается. Всё зависит от твоей активности.
Пиши комментарии
(регистрация не требуется) или на почту acbib3@yandex.ru
Комментариев нет:
Отправить комментарий