Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Zlodey
- Сообщения: 2
- Зарегистрирован: 21 янв 2005, 00:14
Сообщение
Zlodey » 21 янв 2005, 00:17
возьмём к примеру таблицу:
Код: Выделить всё
create table sotr
(
kod_sotr smallint not null primary key,
tab_nom numeric(7,0) not null unique,
fio varchar(50) not null
);
в этом случае сервер сам проверяет условия вставки(изменения) записи, а если сделать так:
Код: Выделить всё
create table sotr
(
kod_sotr smallint,
tab_nom numeric(7,0),
fio varchar(50)
);
create unique index idx_sotr on memory (kod_sotr);
и потом проверять значения на "not null" и "unique" в ТРИГГЕРАХ before insert и before update.
как отразится ЭТО на быстродействии сервера? скорее всего почти никак, я прав?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 21 янв 2005, 11:16
ЭТО - вообще неправильно. Согласно правилам проектирования БД идентификация записей в таблице должна производиться первичным ключом. Любые другие атрибуты, которые могут быть уникальными, указываются как unique. То есть, у таблицы есть PK, а есть alternate key. И одно другого не заменяет.
Более того, в FB 1.5 constraint unique допускает наличие столбцов с null, что недопустимо для ПК.
Так что вопрос не в быстродействии, а в правильном проектировании.
Более того, триггеры видят записи только в пределах транзакции, в которой они вызываются. А индексы видят записи всех транзакций.
-
Zlodey
- Сообщения: 2
- Зарегистрирован: 21 янв 2005, 00:14
Сообщение
Zlodey » 21 янв 2005, 11:36
kdv писал(а):Более того, триггеры видят записи только в пределах транзакции, в которой они вызываются. А индексы видят записи всех транзакций.
ну так и создаётся индекс потом
<code>create unique index idx_sotr on sotr (kod_sotr);</code>
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 21 янв 2005, 12:17
1. над текстом сообщения есть кнопка Code для правильного оформления текста сообщения. тэг - не <code>, а квадратных скобках.
2. создается индекс, И ЧТО ДАЛЬШЕ? FK использует индекс для проверки значений, ВНЕ ТРАНЗАКЦИЙ. Триггер этого делать не может.