powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Индексы по text-полям, основанным на COLLATION со спец атриб: когда они НЕ могут юзаться
1 сообщений из 1, страница 1 из 1
Индексы по text-полям, основанным на COLLATION со спец атриб: когда они НЕ могут юзаться
    #38974591
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Пишу сюда в качестве памятки, а то пропадёт ещё :-)
Денис в курсе, но в доке этого пока не вижу.

Если в определение тестового поля основано на коллации со специальными атрибутами:
1) NUMERIC-SORT=1
или
2) UNICODE_CI (т.е. case insensitive)
- то:
1) для NUMERIC-SORT=1 - не поддерживается PLAN ORDER (т.е. навигация) по такому индексу, если он уникальный. См. CORE-3947 .
2) для UNICODE_CI - не поддерживается использование индекса в GROUP BY, если этот индекс НЕ уникальный. См. CORE-4787 .

Первый тикет имеет статус Resolved, так что вряд ли тут будет прогресс. Второй - пока что Unassigned, поэтому будем надеяться и уповать.

Доказательство:
Код: plaintext
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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
create collation coll_ns for utf8 from unicode 'NUMERIC-SORT=1';
commit;
create domain dm_ns as varchar(10) character set utf8 collate coll_ns;
commit;
recreate table t1(
       a dm_ns
      ,b dm_ns
); commit;

insert into t1(a, b) 
select rdb$relation_id, rdb$relation_id
from rdb$relations; 
commit;
-- core-3947: NUMERIC-SORT UNIQUE indexes will not be usable for ORDER, only for lookups    
create index t1_a_non_unq on t1(a);
create UNIQUE index t1_b_unq on t1(b);
commit;

---------------------------------------------------

recreate table t2(
    a varchar(10) character set utf8 collate unicode_ci
   ,b varchar(10) character set utf8 collate unicode_ci
); commit;

insert into t2(a, b) 
select left(uuid_to_char(gen_uuid()),10), left(uuid_to_char(gen_uuid()),10) 
from rdb$types; 
commit;
-- CORE-4787: non-unique index on field which was defined with "collate unicode_ci" is not used in GROUP BY on that field
create index t2_a on t2(a); 
create UNIQUE index t2_b_unq on t2(b); 
commit;

---------------------------------------------------


set planonly;
set echo on;

-- 1. core-3947: UNIQUE indices on field that was defined with 'NUMERIC-SORT' attribute 
--               will not be usable for ORDER, only for lookups    

-- 1.1. Check for PLAN INDEX:

select * from t1 where a = '10';

select * from t1 where b = '10';


-- 1.2. Check for PLAN ORDER:

select a from t1 group by a;

select b from t1 group by b;


-- 2. CORE-4787: NON_UNIQUE index on field that was defined with 'collate unicode_ci' 
--               is not used in GROUP BY on that field

select a from t2 group by a;

select b from t2 group by b;

/*********************************

Output:
=======

select * from t1 where a = '10';

PLAN (T1 INDEX (T1_A_NON_UNQ))

select * from t1 where b = '10';

PLAN (T1 INDEX (T1_B_UNQ))

select a from t1 group by a;

PLAN (T1 ORDER T1_A_NON_UNQ)

select b from t1 group by b;

PLAN SORT (T1 NATURAL)


select a from t2 group by a;

PLAN SORT (T2 NATURAL)

select b from t2 group by b;

PLAN (T2 ORDER T2_B_UNQ)

***********************************/
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Индексы по text-полям, основанным на COLLATION со спец атриб: когда они НЕ могут юзаться
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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