powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
25 сообщений из 84, страница 2 из 4
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514104
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

она у него есть :)
Но ему же важнее 2 микросекунды в like'е найти
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514110
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

а мне можно? Я в fbdevel вроде написал, что хочу потестить.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514123
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисhvlad,

а мне можно? Я в fbdevel вроде написал, что хочу потестить.Я видел твоё письмо, на выходных соберу и выложу бинарники.
А у Tabloid'а - патч и он собирает себе сам.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514289
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНу да, конкуренты мешают вычислять like.Ну, немного, конечно же, но таки да: мешают :-)
Вот статистика для того же хоста, когда на нём 250 dml-молотилок издеваются над известной тебе базой idx_under_load.
Код: 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.
SQL> set stat on;
SQL> select count(s) from td where s like '%qwertyuiop%';

                COUNT
=====================
              1000000

Current memory = 2763107488
Delta memory = 167184
Max memory = 2766156256
Elapsed time= 8.84 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 54
Writes = 4558
Fetches = 20762024
SQL>
SQL> select count(s) from td where s NOT like '%qwertyuiop%';

                COUNT
=====================
              9000000

Current memory = 2763428488
Delta memory = -309744
Max memory = 2766156256
Elapsed time= 9.84 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 72
Writes = 4304
Fetches = 20672085
SQL>
SQL> select count(s) from td where s like '%q%';

                COUNT
=====================
             10000000

Current memory = 2763755936
Delta memory = -1313368
Max memory = 2775462040
Elapsed time= 9.30 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 83
Writes = 6600
Fetches = 21011277
SQL>
SQL> select count(s) from td where s NOT like '%q%';

                COUNT
=====================
                    0

Current memory = 2764691240
Delta memory = 751192
Max memory = 2775462040
Elapsed time= 9.35 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 103
Writes = 6634
Fetches = 21005441
SQL>

hvladPS Займись уже чем-нить реально полезным...0xFF. я вчера собирал ФБ с сырцов. Твой патч на экстенты (см аттач) - применяется без ошибок (пока --dry-run). Но я забыл: в нём есть эти самые "перепутанные строки" или нет ? И если есть, то покажи, плз, где они.

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514379
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

1. ты не перепутал частное мыло с общим форумом ?
2. я разве давал своё согласие на публикацию этого патча ?
3. это не тот патч
4. нет слов
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514413
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

пора пустырник попить. или новопассит, или ... что-то вроде того. У меня тоже есть знакомый такой, судорожный. Постоянно его тормозить приходится.

p.s. из лучших побуждений.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514478
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

не бей его, я сам (аккуратно и нежно) :)
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514485
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в принудительный отпуск его срочно, куда-нить на Колыму подальше ;-)
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514532
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТаблоид,2. я разве давал своё согласие на публикацию этого патча ?пффф......
2 ip /ws: удалите нахрен плз мой пост!...
2 hvlad: откудова я знал, что его нельзя сюда выпостить ? тем более, ты сказал, что бинарники с этим же функционалом выложишь...

ps. смягчающим обст-вом для себя вижу только одно: собирателей из сырцов тут, на скл.ру, меньше, чем пальцев на руках и ногах. Авось, не увидят :-)
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514538
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrв принудительный отпуск его срочно, куда-нить на Колыму подальше ;-)0xFF.
я и так на Колыме сижу. До центра моцквы добираюсь теперь полтора часа (когда дождя/снега нет), до работа - два с половиной. А из ДП самолёт вроде как 40 минут летит ?
Так что не надо "ля-ля", всех не перевешаете! :-)
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514547
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидоткудова я знал, что его нельзя сюда выпоститьДело не в зя\низя. И не в конкретном патче.
Ну неужели взрослым людям нужно рассказывать банальности про этику, про частную переписку и её отличие от публичного общения ?
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514569
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня дежавю...
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514578
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanУ меня дежавю...чё там ? рассказывай...
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514584
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидwadmanУ меня дежавю...чё там ? рассказывай...
По поводу лайк и длины строки.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514590
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПо поводу лайк и длины строки.да блин... тынц давай, чего огородами ходишь! :-)
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514605
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидwadmanПо поводу лайк и длины строки.да блин... тынц давай, чего огородами ходишь! :-)
Был-бы тынц, я-бы не дежавю написал, а баян. Но в памяти почему-то именно фб касается.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514608
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПо поводу лайк и длины строки.Это не о том, ли, что в параметр нельзя всунуть больше символов, чем есть в поле ?
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514611
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladwadmanПо поводу лайк и длины строки.Это не о том, ли, что в параметр нельзя всунуть больше символов, чем есть в поле ?
Про параметры было на скуле, точно помню. Но у меня дежавю вызвал твой пример с лайками и с %. Грубо говоря, это пустой холивар.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514615
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanГрубо говоря, это пустой холивар.Не может быть ! А как же 1 сек\10млн записей ? Это же катастрофа !
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514618
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladwadmanГрубо говоря, это пустой холивар.Не может быть ! А как же 1 сек\10млн записей ? Это же катастрофа !
За то пообщались душевно. :)
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514630
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanБыл-бы тынця все заголовки своих топегов давно в эксель вытаскиваю отсюда, тупым копипастом. Когда не могу найти гуглом, то просто начинаю просматривать обычным поиском в этом экселе, по Упр-Фе. Чаще всего помогает.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514711
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид, нажать вверху страницы ссылку авторТемы: [ избранные, мои , участ.]не помогает?
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514716
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chТаблоид, нажать вверху страницы ссылку авторТемы: [ избранные, мои , участ.]не помогает?не сильно. много там чего-то накопилось (за бесцельно прожитые годы :-)), а поиск на этому форуме - не самая сильная его сторона.
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514728
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladне бей его, я сам (аккуратно и нежно)
я не бью. просто я знал и знаю несколько людей вот с такими "нервами", с одной стороны это смешно, если смотреть с точки зрения серии Футурамы про то, как
YouTube Video
...
Рейтинг: 0 / 0
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
    #38514752
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так-с. "продолжаем разговор!" (С) :-)
Тут вылезло вот еще что: на произв-сть влияет декларированная длина varchar-поля.
Выше были цветочки, там варчар(50). А вот что получается для ягодок, когда варчар(32760).
DDL:
Код: 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.
commit;
recreate table td(id int, s varchar(32760)); commit;
set term ^;
execute block as
begin
  begin
    execute statement 'create sequence g';
    when any do begin end
  end
end^
set term ;^
commit;
alter sequence g restart with 0;
commit;

set term ^;
execute block as
declare n int = 1000000;
declare m int;
begin
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'q' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qw' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwe' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwer' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwert' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwerty' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwertyu' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwertyui' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwertyuio' ) returning :m-1 into m;
m=n; while(m>0) do insert into td(id, s) values( gen_id(g,1), 'qwertyuiop' ) returning :m-1 into m;
end^ set term ;^ commit;
(ждать - задолбался, минут 5-7 на сильном серваке молотило; при том, что предварительно было сделано gfix -w async; размер файла в итоге = 5593 Mb).

Дальше - то же самое.
Вычитка:
SQL> set stat on;
46 sec
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> out nul; select count(s) from td; out;
Current memory = 2498097104
Delta memory = -6168
Max memory = 2527625632
Elapsed time= 45.99 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 1430580
Writes = 0
Fetches = 22860311
И теперь повторяем забег:
Код: 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.
SQL> select count(s) from td where s like '%q%';

                COUNT
=====================
             10000000

Current memory = 2498102392
Delta memory = 5288
Max memory = 2527625632
Elapsed time= 50.45 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 1430580
Writes = 0
Fetches = 22860311
SQL> select count(s) from td where s NOT like '%q%';

                COUNT
=====================
                    0

Current memory = 2498103256
Delta memory = 864
Max memory = 2527625632
Elapsed time= 49.75 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 1430580
Writes = 0
Fetches = 22860311

Сначала я думкал, что он тратит время на "паддинг" до 32760, когда считывает в память строки, а не на сам LIKE.
Но вот что получается при обычном execute block'e, когда строка уже предварительно создана с замыкающими пробелами - тут вообще к базе обращений нету:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
set stat on;
set term ^;
execute block returns(cnt int) as
declare n int = 10000000;
declare s varchar( 32760 );
begin
  cnt=0;
  s=rpad('q',32760,' ');
  while (n>0) do begin
    cnt = cnt + iif( s like '%q%', 1, 0);
    n=n-1;
  end
  suspend;
end^
set term ;^
set stat off;

output:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Current memory = 2450596208
Delta memory = 390320
Max memory = 2450628912
 Elapsed time= 34.18 sec 
Cpu = 0.00 sec
Buffers = 524288
Reads = 16
Writes = 0
Fetches = 37
SQL> set term ;^
SQL> set stat off;

=== vs ===

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
set stat on;
set term ^;
execute block returns(cnt int) as
declare n int = 10000000;
declare s varchar( 50 );
begin
  cnt=0;
  s=rpad('q',50,' ');
  while (n>0) do begin
    cnt = cnt + iif( s like '%q%', 1, 0);
    n=n-1;
  end
  suspend;
end^
set term ;^
set stat off;

output:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Current memory = 2450530424
Delta memory = -65784
Max memory = 2450628912
 Elapsed time= 6.68 sec 
Cpu = 0.00 sec
Buffers = 524288
Reads = 0
Writes = 0
Fetches = 2

И почти то же самое время, когда строка имеет длину = 1 байт (что также странно!):
Код: 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.
SQL> set stat on;
SQL> set term ^;
SQL> execute block returns(cnt int) as
CON> declare n int = 10000000;
CON> declare s varchar(1);
CON> begin
CON>   cnt=0;
CON>   s='q'; --rpad('q',1,' ');
CON>   while (n>0) do begin
CON>     cnt = cnt + iif( s like '%q%', 1, 0);
CON>     n=n-1;
CON>   end
CON>   suspend;
CON> end^
set term ;^
set stat off;

         CNT
============
    10000000

Current memory = 2450526032
Delta memory = -4392
Max memory = 2450628912
Elapsed time= 6.61 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 0
Writes = 0
Fetches = 0
SQL> set term ;^
SQL> set stat off;
В воздухе витает нехороший вывод. Строка начинается с `q`, дальше только пробелы. Шаблон сравнения - '%q%`. Это значит, что LIKE должен был прекращать разбор строки НЕЗАВИСИМО от её длины сразу после того, как увидит ПЕРВЫЙ символ.
Но тут как-то не видно "независимости" этой.

0xFF. И чего это файл так взбух при варчаре 32760 ? там несжимаемый заголовок записи вырос или чего ?
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 2 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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