Различие между ПОДОБНЫМ и = в MySQL?

Простое среднее с фильтром, если необходимо (Swift 4.2):

let items: [Double] = [0,10,15]
func average(nums: [Double]) -> Double {
    let sum = nums.reduce((total: 0, elements: 0)) { (sum, item) -> (total: Double, elements: Double) in
        var result = sum
        if item > 0 { // example for filter
            result.total += item
            result.elements += 1
        }

        return result
    }

    return sum.elements > 0 ? sum.total / sum.elements : 0
}
let theAvarage = average(nums: items)
17
задан Click Upvote 16 June 2009 в 19:05
поделиться

9 ответов

LIKE может выполнять сопоставление по шаблону:

SELECT foo FROM bar WHERE foobar LIKE "Foo%"

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

19
ответ дан 30 November 2019 в 10:16
поделиться

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

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

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

foobar LIKE '% foo' будет соответствовать всему, что заканчивается на 'foo'.

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

На сайте MySQL есть документация по оператору LIKE . Синтаксис:

expression [NOT] LIKE pattern [ESCAPE 'escape']
29
ответ дан 30 November 2019 в 10:16
поделиться

I think in term of speed = is faster than LIKE. As stated, = does an exact match and LIKE can use a wildcard if needed.

I always use = sign whenever I know the values of something. For example

select * from state where state='PA'

Then for likes I use things like:

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

If you use Oracle Developers Tool, you can test it with Explain to determine the impact on the database.

3
ответ дан 30 November 2019 в 10:16
поделиться

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

3
ответ дан 30 November 2019 в 10:16
поделиться

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

1
ответ дан 30 November 2019 в 10:16
поделиться

С примером в вашем вопросе нет никакой разницы.

Но, как сказал Джесси, вы можете выполнить сопоставление с подстановочными знаками

SELECT foo FROM bar WHERE foobar LIKE "Foo%"

SELECT foo FROM bar WHERE foobar NOT LIKE "%Foo%"

Подробнее:

http: //dev.mysql .com / doc / refman / 5.0 / en / string-compare-functions.html

1
ответ дан 30 November 2019 в 10:16
поделиться

A little bit og google doesn't hurt...

A WHERE clause with equal sign (=) works fine if we want to do an exact match. But there may be a requirement where we want to filter out all the results where 'foobar' should contain "foo". This can be handled using SQL LIKE clause alongwith WHERE clause.

If SQL LIKE clause is used along with % characters then it will work like a wildcard.

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

Without a % character LIKE clause is very similar to equal sign alongwith WHERE clause.

0
ответ дан 30 November 2019 в 10:16
поделиться

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

Однако LIKE даст вам возможность сопоставления с шаблоном с помощью подстановочных знаков.

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

0
ответ дан 30 November 2019 в 10:16
поделиться

Looks very much like taken out from a PHP script. The intention was to pattern-match the contents of variable $foo against the foo database field, but I bet it was supposed to be written in double quotes, so the contents of $foo would be fed into the query.

As you put it, there is NO difference.

It could potentially be slower but I bet MySQL realises there are no wildcard characters in the search string, so it will not do LIKE patter-matching after all, so really, no difference.

0
ответ дан 30 November 2019 в 10:16
поделиться
Другие вопросы по тегам:

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