16

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

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

SELECT foo FROM bar WHERE foobar='$foo'

А ТАКЖЕ

SELECT foo FROM bar WHERE foobar LIKE'$foo'
  • Error: User Rate Limit Exceeded

    от Click Upvote
  • Error: User Rate Limit Exceeded

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

    от
11 ответов
  • 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
    

  • 0

    Выглядит очень похоже на взятый из скрипта PHP. Намерение состояло в т

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

    As you put it, there is NO difference.

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

  • 19

    LIKE может выполнять сопоставление с подстановочными знаками:

    SELECT foo FROM bar WHERE foobar LIKE "Foo%"
    

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

  • 1

    Конечный результат будет таким же

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

  • 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-полей это кажется важным отличием ...

  • 0

    Немного о Google не больно ...

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

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

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

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

  • 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']
    

  • 0

    В вашем примере они семантически равны и должны возвращать одинаковые

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

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

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

  • 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

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

  • 3

    В соответствии с

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

  • 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, чтобы определить влияние на базу данных.