Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 21 мар 2005, 12:04
Может кто-нибудь подскажет можно ли поменять название primary key в уже существующих таблицах? Вариант с копированием и переименованием не подходит, так как нужно практически у всех таблиц и данных очень много.
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 21 мар 2005, 12:35
Ничо ни пониль. Тебе констрайнт перименовать надо или всё-таки поле? Если первое - alter table drop constraint, alter table add constraint. Соотвественно напрыгаешься сначала с удалением ссылающихся на него FK. А потом с их воссозданием. А если таки поле - нельзя. Может проще создать новую пустую и перекачать данные?
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 21 мар 2005, 12:35
Базу новую имел в виду, раз со всеми таблицами такая песня.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 21 мар 2005, 13:51
Есть уже много работающих баз. Будут создовать новые вновь. Необходимо чтобы у них у всех были одинаковые названия первичных ключей (во всех базах). Для новых баз без проблем. Но нужно как-то поменять уже в существующих.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 21 мар 2005, 14:05
Не одного FK нет.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 21 мар 2005, 14:16
Спасибо. Я понял. А можно по быстрее (Без alter table drop constraint, alter table add)?
Некоторые таблицы огромные. Останавливать базы у заказчика на долго не хочется?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 21 мар 2005, 16:58
alter table add constraint будет "долго" только в смысле создания индекса по ПК. так что, по идее слишком долго не должно. Но все зависит от понятия "огромная таблица" и от хилости винчестера на сервере (и возможно настроек temp).
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 21 мар 2005, 17:32
Да это я понимаю. Не хотелось бы перестраивать индексы. Есть базы по 5Гб. Может можно каким-нибудь хитрым оброзом.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 21 мар 2005, 17:51
"хитрым образом" не получится. 5 гиг - это не бог весть что. при нормальном сервере максимум полчаса на пересоздание всех индексов.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 21 мар 2005, 18:17
Ок. Спасибо.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 16 июн 2005, 11:27
Блин накололся имя констрайнта не есть имя индекса.
ALTER TABLE DOCPRIMARY DROP CONSTRAINT INTEG_108;
alter table DOCPRIMARY add constraint OEPK_40022 primary key (ID);
Создается индекс с именем RDB$Primary###
Это не подходит. Может получится что имя индекса разное во всех базах. И использовать первичные индексы в планах получается нельзя (при статическом формировании запроса). Динамически самому как-то не хочется.
Может все-таки как-нибудь можно задать имя первичного индекса?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 16 июн 2005, 11:37
Создается индекс с именем RDB$Primary###
везде кроме Firebird 1.5. Там если имя constraint задано, то имя индекса используется то же самое.
И вообще, не надо планы руками писать, ну не надо.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 16 июн 2005, 14:43
И вообще, не надо планы руками писать, ну не надо.
Тогда уж надо запретить вообще.
В принципе я сам почти согласен с этим.
Почти всегда можно обмануть построитель плана и направить его в нужное русло.