powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / реализация like и substring
19 сообщений из 19, страница 1 из 1
реализация like и substring
    #35424028
yaro83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет,

скажите pls чем лучше пользоваться в ситуации, когда есть строка из 10 символов, на 9 месте может встречаться символ 1, like '1' или substring( , 10, 1) = 1 ?

спасибо
...
Рейтинг: 0 / 0
реализация like и substring
    #35424055
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически, substring будет чуть пошустрее.
На практике, я разницы "на глаз" не замечал.
...
Рейтинг: 0 / 0
реализация like и substring
    #35424083
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaro83 пишет:

> скажите pls чем лучше пользоваться в ситуации, когда есть строка из 10
> символов, на 9 месте может встречаться символ 1, like '1' или substring(
> , 10, 1) = 1 ?

Для чего пользоваться ?

Заметь, что
-- WhiteOwl неправ
-- like '1' эквивалентно = '1'
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
реализация like и substring
    #35424102
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЗаметь, что
-- WhiteOwl неправ
-- like '1' эквивалентно = '1'Почему это я неправ???
like '1' действительно будет эквивалентно ='1'. Но это очень частный случай, совершенно не используемый в реальной жизни. На него нет смысла равняться.
...
Рейтинг: 0 / 0
реализация like и substring
    #35424253
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-бы не поставили, а если это единственное условие поиска, о будет tablescan
...
Рейтинг: 0 / 0
реализация like и substring
    #35424294
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПочему это я неправ???


Потому что фраза "Теоретически, substring будет чуть пошустрее." не имеет смысла. Когда пошустрее? Где ?
...
Рейтинг: 0 / 0
реализация like и substring
    #35424803
yaro83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я может с ошибками код пишу, sybase не знаю

declare @string varchar(10)
select @string = '0000000001'

if (@string like '1') begin ... end

либо

if (substring(@string, 10, 1) = '1') begin ... end

что быстрее будет работать из этих двух инструкций, в варианте когда @string это varchar(10) и @string это varchar(20) вида 00000000000000000001?

thx
...
Рейтинг: 0 / 0
реализация like и substring
    #35425978
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaro83 пишет:

> if (@string like '1') begin ... end

Должно быть
if (@string like '%1') begin ... end

> что быстрее будет работать из этих двух инструкций, в варианте когда
> @string это varchar(10) и @string это varchar(20) вида 00000000000000000001?

Пофигу. Там разница будет в наносекундах.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
реализация like и substring
    #35427671
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается, что if (@string like '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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
declare @string        varchar( 10 )
declare @ii            int
declare @date_time     datetime


select @string = '0000000001'


SELECT @date_time = GetDate () 
SELECT @ii     =  1 

WHILE @ii <  10000 
BEGIN

    if (@string like '1') 
        SELECT @ii = @ii +  1 
    else    
        SELECT @ii = @ii +  1 
END

SELECT @date_time = GetDate (), @ii = DATEDIFF(ms, @date_time, GetDate ()) 

/* Время первого цикла у меня (12590)*/
SELECT @ii

SELECT @ii     =  1 

WHILE @ii <  10000 
BEGIN

    if (substring(@string,  10 ,  1 ) = '1') 
        SELECT @ii = @ii +  1 
    else    
        SELECT @ii = @ii +  1 
END

SELECT @date_time = GetDate (), @ii = DATEDIFF(ms, @date_time, GetDate ()) 

/* Время второго цикла у меня (13046) */
SELECT @ii
...
Рейтинг: 0 / 0
реализация like и substring
    #35427703
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, фигня если блоки поменять местами то substring(@string, 10, 1) = '1' быстрее
...
Рейтинг: 0 / 0
реализация like и substring
    #35427713
yaro83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я пытался вот такое протестировать

Код: 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.
begin

declare @d varchar( 100 )
declare @t datetime
declare @i integer
declare @maxcount integer
declare @teststring varchar( 20 )
declare @searchstring varchar( 1 )

select @maxcount =  100000 
--select @teststring = '12345678901234567890'
--select @teststring = '0000000001'
--select @teststring = '00000000000000000001'
select @teststring = '000000000000000000000000000001'

select @t = getdate()
select @d = convert(varchar( 20 ),@t, 108 )
print @d


select @i =  0 
while @i < @maxcount
begin
    
    -- это если оставить like    
    /*if (@teststring like '%1%') 
    begin
         select @i = @i + 1
    end
    */
    
    
    -- а это если подстрока номерация с 
    if (substring(@teststring, 30 , 1 ) = '1')
    begin
         select @i = @i +  1 
    end
    
end

-- статистика 
-- кол-во 100000 строка 10 чаров
    -- like        8 сек
    -- substr      7 сек 
-- кол-во 100000 строка 20 чаров
    -- like        8 сек
    -- substr      7 сек
-- кол-во 100000 строка 30 чаров
    -- like        ? сек
    -- substr      ? сек



select @t = getdate()
select @d = convert(varchar( 20 ),@t, 108 )
print @d

end

но ничего путного не получил...
...
Рейтинг: 0 / 0
реализация like и substring
    #35427761
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Badger пишет:
> Автор: "Badger"

> Получается, что if (@string like \'1\') работает быстрее

Не занимайтесь ерундой. Лучше исправьте ошибку, о которой
я вам говорю уже в который раз


вместо

if (@string like \'1\')

должно быть

if (@string like \'%1\')

так что вы мерили просто

if (@string = \'1\')

которому @string like \'1\' эквивалентно.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
реализация like и substring
    #35427787
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Не занимайтесь ерундой. Лучше исправьте ошибку, о которой
я вам говорю уже в который раз

вместо

if (@string like '1')

должно быть

if (@string like '%1')

так что вы мерили просто

if (@string = '1')

которому @string like '1' эквивалентно.

Posted via ActualForum NNTP Server 1.4

Ошибку исправил, а время осталось практически темже какой блок раньше, тот и быстрее
...
Рейтинг: 0 / 0
реализация like и substring
    #35427789
yaro83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня в тесте стоит if (@teststring like '%1%') - разве не тоже самое?
...
Рейтинг: 0 / 0
реализация like и substring
    #35428141
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaro83 wrote:
> Автор: "yaro83"
> у меня в тесте стоит if (@teststring like \'%1%\') - разве не тоже самое?
У тебя - да, стоит. У него - нет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
реализация like и substring
    #35428198
yaro83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. можно ли сформулировать, что пытаться оптимизировать like заменив его на substring и введя разрядность в строке не имеет смысла?
...
Рейтинг: 0 / 0
реализация like и substring
    #35428254
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaro83 wrote:

> т.е. можно ли сформулировать, что пытаться оптимизировать like заменив
> его на substring и введя разрядность в строке не имеет смысла?

Конечно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
реализация like и substring
    #35428311
yaro83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тяжело в это поверить ибо доступ по индексу быстрее же должен быть, чем перебор со сравнением, думаю, в STL это можно ярко показать и в Oracle это тоже будет видно...
...
Рейтинг: 0 / 0
реализация like и substring
    #35428594
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaro83 wrote:

> тяжело в это поверить ибо доступ по индексу быстрее же должен быть, чем
> перебор со сравнением, думаю, в STL это можно ярко показать и в Oracle
> это тоже будет видно...
Где ты там индексы видал в ваших тестах ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / реализация like и substring
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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