powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Удаление лишних индексов
5 сообщений из 5, страница 1 из 1
Удаление лишних индексов
    #34119532
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASA7
Так уж получилось, что в про процессе развития базы в ней со временем накопились лишние индексы в разных таблицах. Т.е. либо он вообще не нужен, либо по этому полю есть Foreign keys или первичный ключ.
Вообщем нужно сделать скрипт, который под Isql удалит ненужные индексы во всей базе. Скрипт нужен т.к. баз одинаковых несколько и на каждой нужно удалить.
Возникает вопрос.
Как правильно и надежно определить в скрипте наличие индекса с определенным именем по определенной таблице, чтобы потом выдать drop?

Знаю про таблицу SYSINDEX и view sysindexes. Видимо нужно по ним запрос делать для проверки наличия.
...
Рейтинг: 0 / 0
Удаление лишних индексов
    #34119560
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подумал опосля.
А может вообще не париться, а выдать просто кучу drop
Если ругнется, что нет такого индекса, то и ладно - продолжить выполнение.
Выполнять, то все равно буду вручную из isql.

Но все равно вопрос остается. Решение может пригодиться в других случаях
...
Рейтинг: 0 / 0
Удаление лишних индексов
    #34120446
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помню насчет семерки, но девятка в окне сервера выдает предупреждения если на таблице есть дублирующиеся индексы (например ручной и ключа).
Вообще чтобы получить список всех индексов, достаточно сделать выборку типа такой:
Код: plaintext
1.
2.
3.
4.
select table_name, index_name, list(column_id || ' ' || "order")
from SYSINDEX
     natural join SYSIXCOL
     natural join SYSTABLE
group by table_name, index_name
Результат уже можно группировать как угодно.


---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
Удаление лишних индексов
    #34123266
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто вытащить список индексов конечно не интересно.
Интересно именно удалить ненужные индексы с точки зрения любой абстрактной базы ASA.

Мы знаем, что ASA автоматом создает индексы на PK, FK и уникальных колонках. Если я не прав, поправьте.
Можно написать примерно следующий скрипт.

Цикл по всем таблицам(только пользовательским, системные нам не нужны)
Цикл по индексам таблицы(здесь нужно не учитывать индексы созданные ASA по описанным выше правилам)
(Если индекс создан на колонке PK или уникальной колонке)
Или (Если индекс создан на колонке FK)
то удаляем индеск.
Конец цикла по индексам
Конец цикла по таблицам

Запустив такой скрипт на любой базе, мы удалим ненужные индексы. Конечно не все так должно быть просто. Есть еще и составные ключи и индексы(по нескольким колонкам), это тоже надо как-то отследить. Интересует нет ли у кого готового решения или в данном случае не стоит полагаться на готовое решение, а лучше самому аккуратно все просмотреть и оптимизировать?

И еще вопрос по индексам к знатокам относительно составных PK и индексов
1) Есть таблица PK состоит из 4 колонок с1,с2,с3,с4
2) все запросы с данной таблицей(кроме вставки конечно) работают с
where c1=? and c2=? или where c3=? and c4=?
Нужно ли создавать индексы i1(c1,c2) и i2(c3,c4)?
...
Рейтинг: 0 / 0
Удаление лишних индексов
    #34125345
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С последним вопросом отбой, разобрался сам.
BOL почитал как следует.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Удаление лишних индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]