Мне интересно, какова будет производительность запроса при использовании ключевого слова LIKE и подстановочного знака в качестве значения по сравнению с отсутствием предложения where.
Рассмотрим условие where, такое как "WHERE a LIKE '%'". Это будет соответствовать всем возможным значениям столбца «а». Как это можно сравнить с отсутствием предложения where.
Причина, по которой я спрашиваю это, состоит в том, что у меня есть приложение, в котором есть некоторые поля, в которых пользователь может указывать значения для поиска. В некоторых случаях пользователю хотелось бы получить все возможные результаты. В настоящее время я использую один запрос, подобный этому:
SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?
Можно указать значения «%» и «%», чтобы соответствовать всем возможным значениям для a и или b. Это удобно, поскольку для этого я могу использовать один именованный запрос в своем приложении. Интересно, каковы соображения производительности для этого. Уменьшает ли оптимизатор запросов значение LIKE '%', чтобы оно просто соответствовало всем? Я понимаю, что, поскольку я использую именованный запрос (подготовленное утверждение), это также может повлиять на ответ. Я понимаю, что ответ, скорее всего, зависит от конкретной базы данных. В частности, как это будет работать в Oracle, MS SQL Server и Derby.
Альтернативный подход к этому состоит в использовании 3 отдельных запросов, основанных на вводе пользователем символа подстановки.
A - шаблонный запрос:
SELECT * FROM TableName WHERE b LIKE ?
B - шаблонный запрос:
SELECT * FROM TableName WHERE a LIKE ?
A и B являются подстановочными знаками:
SELECT * FROM TableName
Нет подстановочных знаков:
SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?
Очевидно, что один запрос является самым простым и простым в обслуживании. Я бы предпочел использовать только один запрос, если производительность все еще будет хорошей.