Какая разница между "LIKE" и "="
От: Аноним  
Дата: 15.08.03 11:26
Оценка:
сабж.
Re: Какая разница между "LIKE" и "="
От: King Oleg Украина http://kingoleg.livejournal.com
Дата: 15.08.03 11:35
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>сабж.

Like — это аналог поиска по шаблону. А = исчет строгое соответствие.
Пример

id string
1 da
2 daru
3 okda
4 ok


select count(*) from table where string = 'da'

Ответ — 1

select count(*) from table where string like 'da'

Ответ — 1

select count(*) from table where string like '%da%'

Ответ — 3
... << RSDN@Home 1.1 beta 1 >>
King Oleg
*Читайте DOC'и, они rules*
Re: Читай книжки
От: yogi Россия  
Дата: 15.08.03 11:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>сабж


сабж

LIKE используется для проверки соответствия строки некоторому шаблону, = — сравнивает на равенство.
Путь к сердцу женщины лежать не должен.
Re: Добавлю
От: Zheka Литва  
Дата: 16.08.03 02:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>сабж.

Так же "=" находит записи быстрее, если поле индексное или ключевое.
like ищет во всех записях и не рекомендуется в большой базе данных.
А данные с утра ушли на базу...
Re[2]: Добавлю
От: vedmalex Россия  
Дата: 16.08.03 07:09
Оценка:
Здравствуйте, Zheka, Вы писали:

Z>Здравствуйте, Аноним, Вы писали:


А>>сабж.

Z>Так же "=" находит записи быстрее, если поле индексное или ключевое.
Z>like ищет во всех записях и не рекомендуется в большой базе данных.

Проверено, мною лично, для научной работы.
Если сравнивать
 name = 'слово'
и
 name like 'слово'

для неиндексиремого или индексируемого поля,
то разница практически незаметна — несколько процессорных сессий = 10^-4c,
так как поиск результата идет либо полным перебором таблицы либо индекса.
а вот выражения.
К тому же, до меня уже говорили, = полное сравнение,
а Like сравнение по шаблону
и если like будет содержать выражение 'слог%' то время поиска
также будет незначительно отличаться от за тем исключением, что, возможно,
селективность запроса будет уменьшена( большая селективность всегда лучше)
ну и вообще, повторюсь, Like применяется для поиска строки по шалону, а = для поиска точного соответствия.
по крайней мере это все справедливо для Oracle.
Есть такая тука, Oracle 9i Performance Tuning почитайте, там более подробно написано.
http://technet.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96533/index.htm
... << RSDN@Home 1.1 beta 1 >>
Re[3]: Добавлю
От: Pavel Kalyakin http://www.livejournal.com/users/pavelk/
Дата: 18.08.03 12:45
Оценка: 10 (1) +1
Здравствуйте, vedmalex, Вы писали:
V>К тому же, до меня уже говорили, = полное сравнение,
V>а Like сравнение по шаблону
V>и если like будет содержать выражение 'слог%' то время поиска
V>также будет незначительно отличаться от за тем исключением, что, возможно,
Хочу добавить, что в плане MS SQL сервера поиск по = или Like 'word%' серьезных
различий в плане производительности не имеет, так как индексы могут использоватся в обоих случаях.
Но, если используется LIKE '%test%', то индексы использоватся не могут, что приводит к table scan.
PK, senior programmer of http://www.actis.ru
Павел Калякин, MCDS.NET, MCS
http://www.livejournal.com/users/pavelk — Мой блог
Re[4]: Добавлю
От: vedmalex Россия  
Дата: 19.08.03 08:50
Оценка:
Здравствуйте, Pavel Kalyakin, Вы писали:

PK>Здравствуйте, vedmalex, Вы писали:

V>>К тому же, до меня уже говорили, = полное сравнение,
V>>а Like сравнение по шаблону
V>>и если like будет содержать выражение 'слог%' то время поиска
V>>также будет незначительно отличаться от за тем исключением, что, возможно,
PK>Хочу добавить, что в плане MS SQL сервера поиск по = или Like 'word%' серьезных
PK>различий в плане производительности не имеет, так как индексы могут использоватся в обоих случаях.
PK>Но, если используется LIKE '%test%', то индексы использоватся не могут, что приводит к table scan.
об этом я заыл упомянть, в оракл такая же фигня, за тем исключением что в случае '%слово%',
если поле индексировано то выполняется сканирование индекса,
а если нет то соответственно TableScan для кортежей удовлетворяющих первой части условия.
Наверняка ктакая же штучка реализована и в оптимизаторе MSSQL,
иначе и tableScan для всей таблицы не самый оптимальный план выполнения — совсем не оптимальный.
... << RSDN@Home 1.1 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.