powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странное поведение запроса
11 сообщений из 11, страница 1 из 1
Странное поведение запроса
    #40093524
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скрипт:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
create table t1 (id bigint not null, primary key(id));
create table t2 (id bigint not null, primary key(id));
create table t3 (id bigint GENERATED BY DEFAULT AS IDENTITY not null, id_t1 bigint not null, id_t2 bigint not null, flg1 smallint default 0, flg2 smallint default 0,
                 primary key(id), foreign key (id_t1) REFERENCES t1(id), foreign key (id_t2) REFERENCES t2(id));
create index t3_idx on t3 (id_t2,flg1);
commit work;

set term ^;
execute block
as
declare variable i int=1;
begin
insert into t2(id)
select 1 from rdb$database
union
select 2 from rdb$database;

while (:i<=2000000)
do
begin
insert into t1(id)
values(:i);

insert into t3(id_t1,id_t2)
values(:i, 1);

insert into t3(id_t1,id_t2)
values(:i, 2);

i=:i+1;
end
end^

set term ;^

update t3 set flg1=1 where id<=500000;

commit work;

set statistics index t3_idx;

commit work;



Собственно сам запрос:
Раз
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Query
------------------------------------------------
execute block
as
declare variable ID bigint;
begin
  for select ID
      from T3
      where ID_T2 = 1 and
            FLG1 = 0 and
            FLG2 = 0
      into :ID
  do
  begin
    break;
  end
end

Plan
------------------------------------------------
PLAN (T3 INDEX (T3_IDX))

Query Time
------------------------------------------------
Prepare       : 0,00 ms
Execute       : 156,00 ms
Avg fetch time: 0,00 ms

Memory
------------------------------------------------
Current: 1 120 421 232
Max    : 1 157 990 336
Buffers: 65 536

Operations
------------------------------------------------
Read   : 0
Writes : 0
Fetches: 253 075
Marks  : 0


Enchanced Info:
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|          Table Name           |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts | Backouts |  Purges  | Expunges |
|                               |   Total   |   reads   |    reads    |         |         |         |          |          |          |
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|T3                             |         0 |    250001 |           0 |       0 |       0 |       0 |        0 |        0 |        0 |
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+



Два
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Query
------------------------------------------------
execute block
as
declare variable ID bigint;
begin
  for select ID
      from T3
      where ID_T2 = 1 and
            FLG1 = 0 and
            FLG2 = 1
      into :ID
  do
  begin
    break;
  end
end

Plan
------------------------------------------------
PLAN (T3 INDEX (T3_IDX))

Query Time
------------------------------------------------
Prepare       : 0,00 ms
Execute       : 1 139,00 ms
Avg fetch time: 0,00 ms

Memory
------------------------------------------------
Current: 1 120 421 232
Max    : 1 157 990 336
Buffers: 65 536

Operations
------------------------------------------------
Read   : 0
Writes : 0
Fetches: 2 016 331
Marks  : 0


Enchanced Info:
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|          Table Name           |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts | Backouts |  Purges  | Expunges |
|                               |   Total   |   reads   |    reads    |         |         |         |          |          |          |
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|T3                             |         0 |   2000000 |           0 |       0 |       0 |       0 |        0 |        0 |        0 |
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+



Почему при добавление в условие третьего и последующего полей такое поведение? Причем не только наличие самого условия, так еще и значение влияет.

Тестил и на винде и на линуксе, 3.0.7 SS

P.S. Статистику по по всем индексам не забудьте пересчитать.
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093526
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странные запросы, странные индексы, сервер неизвестен...
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093528
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
странные запросы, странные индексы, сервер неизвестен...

Сервер дописал уже.
Запрос не странный, просто накидал побырому чтобы показать суть.

В реале запрос такой:
Код: sql
1.
2.
3.
4.
5.
update t3
set flg1=1
where flg1=0 and 
id_t2=? and 
flg2=1;
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093531
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажи, сколько записей попадают в это условие.
сделай COUNT().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093533
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
Я хз как корректно ответить на твой вопрос. В любой момент времени может быть разное кол-во, как оно на это влияет?
Смысл в том, что приведенная таблица это некая очередь, и мне нужно все лишь помечать отправленные пакеты флагом принят, т.е. flg1 это принят, flg2 отправлен.
Смысл в том что и в первом и втором случае скан таблицы идет по индексу, понятное дело что в нем содержится 2кк записей, но почему тогда в одном случае читает 250к, а в другом все строки индекса?

Я понимаю что решить эту проблему можно будет включив в индекс третье поле, но как то хотел обойтись без этого.
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093535
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
Статистику по по всем индексам не забудьте пересчитать.
А ыт по всем пересчитал ? И по FK тоже ?
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093542
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992,

после апдейтов мусор собран? кроме того вдуплять сколько там каких записей в пятницу вечером - ну ваще не аллё.
Насколько я понял, в результате манипуляций скрипта
- в t3 - 4 млн записей (по 2 млн с id_t2=1 и с id_t2=2)
- в t3 в результате апдейта update t3 set flg1=1 where id<=500000; получаем 500к записей с flg1=1. Причем, 250к из них это id_t2=1, и 250к id_t2=2

в первом запросе выбираем - ID_T2 = 1 два миллиона, flg1=0 750 тысяч, и ... тут уже не стыкуется. Где-то я ошибся.
И - специально сделал поиск по топику, в запросах мы имеем flg2=0 или flg2=1, а апдейта или заполнения столбца flg2 нигде нет.
Вот зачем людям голову морочить...
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093550
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,
По всем.
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093551
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992,

если по всем, то картинка уже другая будет.
Хотя... я на fb4 проверял, но не думаю, что есть разница.
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093552
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дюбавлю - смотри на explained plan, а не на обычный.
...
Рейтинг: 0 / 0
Странное поведение запроса
    #40093557
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992,

короче, гражданин. Манипулируешь в where
Код: plaintext
1.
2.
3.
      from T3
      where ID_T2 = 1 and
            FLG1 = 0 and
            FLG2 = 1

- ну так дай и себе и нам
Код: plaintext
1.
2.
select count(id), id_t2, flg1, flg2
from t3
group by  id_t2, flg1, flg2
И не надо было морочить голову с начальным скриптом, там половина не используется в вопросе, а другую половину на селедку наматывали.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странное поведение запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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