powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
8 сообщений из 8, страница 1 из 1
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38537928
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Давно мечтал спросить, да всё как-то стеснялся...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
# isql localhost/3330:employee

 -- statement #1 
SQL> insert into country values('USA','RUR');
Statement failed, SQLSTATE = 23000
violation of PRIMARY or UNIQUE KEY constraint "INTEG_2" on table "COUNTRY"
-Problematic key value is ("COUNTRY" = 'USA')

 -- statement #2 
SQL> update country set country='USA' where country='Japan';
Statement failed, SQLSTATE = 23000
violation of PRIMARY or UNIQUE KEY constraint "INTEG_2" on table "COUNTRY"
-Problematic key value is ("COUNTRY" = 'USA')

 -- statement #3 
SQL> delete from country where country='USA';
Statement failed, SQLSTATE = 23000
violation of FOREIGN KEY constraint "INTEG_11" on table "JOB"
-Foreign key references are present for the record
-Problematic key value is ("COUNTRY" = 'USA')

Trace:
#######

statement #1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
insert into country values('USA','RUR')
0 records fetched
      0 ms, 4 read(s), 27 fetch(es), 5 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout
*******************************************************************************************
RDB$INDICES                                       1
RDB$RELATION_CONSTRAINTS                          1
COUNTRY                                                               1                   1

statement #2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
update country set country='USA' where country='Japan'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (COUNTRY INDEX (RDB$PRIMARY1))
0 records fetched
      0 ms, 1 read(s), 63 fetch(es), 7 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout
*******************************************************************************************
RDB$INDICES                                       5
RDB$RELATIONS                                     2
RDB$RELATION_CONSTRAINTS                          1
COUNTRY                                           1         1                             1

statement #3
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
delete from country where country='USA'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (COUNTRY INDEX (RDB$PRIMARY1))
0 records fetched
      0 ms, 4 read(s), 40 fetch(es), 2 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout
********************************************************************************************
RDB$INDICES                                       4
RDB$FORMATS                                       1
RDB$RELATION_CONSTRAINTS                          1
COUNTRY                                           1                             1         1

Q1. Когда идёт insert с записью в поле, участвующее в PK / UK, то всегда дёргается соотв-щий индекс для проверки уникальности. Где соотв-щий index scan в статистике stt #1 по таблице COUNTRY ?

Q2. Когда идёт обновление записи, являющейся родительской по отн. к другим, и при этом не установлена опция on update cascade | set null, равно как и при удалении, то должна идти проверка существования дочерней записи. Где соотв-щий index scan по таблице JOB ?
show table job
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> show table job;
JOB_CODE                        (JOBCODE) VARCHAR(5) Not Null
                                CHECK (VALUE > '99999')
JOB_GRADE                       (JOBGRADE) SMALLINT Not Null
                                CHECK (VALUE BETWEEN 0 AND 6)
JOB_COUNTRY                     (COUNTRYNAME) VARCHAR(15) Not Null
JOB_TITLE                       VARCHAR(25) Not Null
MIN_SALARY                      (SALARY) NUMERIC(10, 2) Not Null DEFAULT 0
                                CHECK (VALUE > 0)
MAX_SALARY                      (SALARY) NUMERIC(10, 2) Not Null DEFAULT 0
                                CHECK (VALUE > 0)
JOB_REQUIREMENT                 BLOB segment 400, subtype TEXT Nullable
LANGUAGE_REQ                    ARRAY OF [5]
                                VARCHAR(15) Nullable
 CONSTRAINT INTEG_11:
  Foreign key (JOB_COUNTRY)    References COUNTRY (COUNTRY) 
CONSTRAINT INTEG_10:
  Primary key (JOB_CODE, JOB_GRADE, JOB_COUNTRY)
CONSTRAINT INTEG_12:
  CHECK (min_salary < max_salary)
...
Рейтинг: 0 / 0
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38537930
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в статистике показываются записи, прочитанные через индекс . Любые дергания индекса, не приводящие к чтению записи, там никак не отражаются. UPDATE/DELETE сначала читает запись, потом ее меняет/удаляет, чтение попадает в статистику. Для INSERT нет никакого чтения.
...
Рейтинг: 0 / 0
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38537939
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrв статистике показываются записи, прочитанные через индекс . Любые дергания индекса, не приводящие к чтению записи, там никак не отражаются. UPDATE/DELETE сначала читает запись, потом ее меняет/удаляет, чтение попадает в статистику. Для INSERT нет никакого чтения.Но ведь там совсем ненулевые затраты будут (я про чтение только индексов для проверки), если на много раз умножить, особливо при глубине индекса >= 4.
...
Рейтинг: 0 / 0
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38537944
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

ну и что? В сортировке тоже затраты офигенные. Будет (возможно, когда-нибудь) расширена статистика на этот счет - увидишь. А куда не предназначено, все что тебе хочется пихать не надо.
...
Рейтинг: 0 / 0
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38537945
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидособливо при глубине индекса >= 4
не надоело? Утешаюсь лишь тем, что отняли у тебя размер страницы в 1К и 2К.
...
Рейтинг: 0 / 0
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38537950
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТаблоидособливо при глубине индекса >= 4не надоело?ну как сказать... тест на master=2e6 & detail=2e8 записей, конечно же, многому научил
Но во-первых, многим базам на ФБ уже лет 5..8, каким-то еще больше. В них всё время поступают новые данные.
А значит, таблицы в сотни лямов строк там точно будут появляться. А раз так, то индексы с глубиной = 4 перестанут быть редкостью.
Во-вторых, я как-то недавно спрашивал: а отчего глубина именно >= 4 считается "нехорошей", но так и не получил ответа. Чем принципиально 4 хуже 3 по сравнению c 3 против 2 ?
...
Рейтинг: 0 / 0
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38537951
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrну и что? В сортировке тоже затраты офигенные. Будет (возможно, когда-нибудь) расширена статистика на этот счет - увидишь. А куда не предназначено , все что тебе хочется пихать не надо.я правильно понимать, что с твоей т.зр. затраты на однократное чтение индекса (для проверки PK /FK), даже умноженные на 100500 раз - например, при удалении большой пачки строк из master-таблицы - всё равно ничтожные по сравнению с остальными ?
...
Рейтинг: 0 / 0
trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
    #38538032
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

у тебя талант видеть в словах то, чего там нет. Я всего-лишь сказал, что счетчик индексных чтений не является счетчиком индексных сканов или чем-либо еще по твоему желанию.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / trace не показывает index scan'ы при попытках нарушения PK / FK. Why ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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