Вопрос по mysql – Разница между LIKE и = в MYSQL?

16

В чем разница между

SELECT foo FROM bar WHERE foobar='$foo'

А ТАКЖЕ

SELECT foo FROM bar WHERE foobar LIKE'$foo'

Ваш Ответ

11   ответов
19

SELECT foo FROM bar WHERE foobar LIKE "Foo%"

Если вам не нужно сопоставление с образцом, используйте = вместо LIKE. Это быстрее и безопаснее. (Вы используете параметризованные запросы, верно?)

Error: User Rate Limit Exceeded Click Upvote
0

выходные данные.

Тем не менее, LIKE даст вам возможность сопоставления с шаблоном.

Вы также должны заметить, что = может дать вам повышение производительности в некоторых системах, поэтому, если вы, например, ищете номер exakt, = будет предпочтительным методом.

0

ом, чтобы сопоставить с шаблоном содержимое переменной$foo противfoo поле базы данных, но я уверен, что оно должно было быть написано вdouble quotesпоэтому содержимое $ foo будет передано в запрос.

As you put it, there is NO difference.

Потенциально он может быть медленнее, но я уверен, что MySQL понимает, что в строке поиска нет подстановочных знаков, так что в конце концов он не будет выполнять LIKE-сопоставление, поэтому на самом деле никакой разницы.

0

Like быть быстрее чем=

Like fetched a number of rows in 0.203 secs the first time then 0.140 secs

= returns fetched the same rows in 0.156 secs constantly

Сделай свой выбор

Это, вероятно, просто означает, что запрос кэшируется.
28

= в SQL делает точное совпадение.

LIKE выполняет сопоставление с использованием подстановочных знаков, используя «%» в качестве символа совпадения из нескольких символов и '_'; как односимвольный символ совпадения. & APOS; \ & APOS; является escape-символом по умолчанию.

foobar = '$foo' а такжеfoobar LIKE '$foo' будет вести себя так же, потому что ни одна строка не содержит подстановочный знак.

foobar LIKE '%foo' будет соответствовать чему-либо, оканчивающемуся на «foo».

LIKE также имеетESCAPE предложение, чтобы вы могли установить escape-символ. Это позволит вам соответствовать буквальному значению «%». или '_'; внутри строки. Вы также можете сделатьNOT LIKE.

Сайт MySQL имеетдокументация на оператора LIKE, Синтаксис

expression [NOT] LIKE pattern [ESCAPE 'escape']
3

с точки зрения скорости = быстрее, чем, как. Как уже говорилось, = делает точное совпадение и LIKE может использовать подстановочный знак, если это необходимо.

Я всегда использую знак = всякий раз, когда знаю значения чего-либо. Например

select * from state where state='PA'

Тогда для лайков я использую такие вещи, как:

select * from person where first_name like 'blah%' and last_name like 'blah%'

Если вы используете Oracle Developers Tool, вы можете протестировать его с помощью Explain, чтобы определить влияние на базу данных.

0

Предложение WHERE со знаком равенства (=) работает нормально, если мы хотим сделать точное совпадение. Но может существовать требование, при котором мы хотим отфильтровать все результаты, где «foobar» должен содержать & quot; foo & quot ;. Это можно сделать с помощью предложения SQL LIKE вместе с предложением WHERE.

Если предложение SQL LIKE используется вместе с символами%, оно будет работать как подстановочный знак.

SELECT foo FROM bar WHERE foobar LIKE'$foo%'

Без символа% предложение LIKE очень похоже на знак равенства вместе с предложением WHERE.

5

что MySQL будет выполнять приведение в зависимости от ситуации: LIKE будет выполнять приведение строки, тогда как = будет выполнять приведение типа int. Учитывая ситуацию:

    (int)   (vchar2)
id  field1  field2
1   1       1
2   1       1,2

SELECT * FROM test AS a LEFT JOIN test AS b ON a.field1 LIKE b.field2

будет производить

id  field1  field2  id  field1  field2
1   1       1       1   1       1
2   1       1,2     1   1       1

в то время как

SELECT * FROM test AS a LEFT JOIN test AS b ON a.field1 = b.field2

будет производить

id  field1  field2  id  field1  field2
1   1       1       1   1       1
1   1       1       2   1       1,2
2   1       1,2     1   1       1
2   1       1,2     2   1       1,2
Error: User Rate Limit Exceeded
0

LIKE и знак равенства= !

Пример: у меня есть таблица с полем & quot; ID & quot; (введите: int (20)) и запись, которая содержит значение «123456789»

Если я сделаю:

SELECT ID FROM example WHERE ID = '123456789-100'

Записать с идентификатором = "123456789" найден (неверный результат)

Если я сделаю:

SELECT ID FROM example WHERE ID LIKE '123456789-100'

Запись не найдена (это правильно)

Так что, по крайней мере, для INTEGER-полей это кажется важным отличием ...

3

Справочная страница MYSQLконечные пробелы в LIKE значимы, но не =, и вы можете использовать подстановочные знаки,% для любых символов и _ для ровно одного символа.

1

но механизм запросов использует другую логику для получения ответа. Как правило, запросы LIKE записывают больше циклов, чем & quot; = & quot; запросы. Но когда не указан подстановочный знак, я не уверен, как оптимизатор может это обработать.

Похожие вопросы