Вы можете использовать INSTR
с противоположными аргументами, чем можно было бы сделать в большинстве случаев:
SELECT *
FROM mytable
WHERE INSTR('hello world', mycol) = 1
Это будет возвращать записи, где Mycol имеет подстроку «привет мир», начиная с позиции 1. Таким образом, любой из следующий будет соответствовать:
ч
он
Хель
ад
привет
привет (с завершающими пробелами)
привет ж
привет горе
привет УНР
привет Worl
привет мир
Вы могли бы, возможно, получить более высокую производительность с добавлением следующих избыточными условие, которое могло бы намекнуть на механизм SQL, чтобы выбрать индекс для mycol:
SELECT *
FROM mytable
WHERE INSTR('hello world', mycol) = 1
AND mycol like 'h%'
Просто имейте в виду, что даже с использованием индекса это не гарантирует более быстрый выход. Представьте таблицу со значениями:
Хель
helaaaaaaa
helaaaaaab
helaaaaaac
... (более 1000 записей, как, что, и, наконец :)
привет мир
.. тогда двигатель все равно будет сканировать все записи и получать только первое и последнее.
Если у вас есть приложение выполняет этот запрос, вы могли бы позволить ей построить SQL динамически, так что это выглядит следующим образом:
SELECT *
FROM mytable
WHERE mycol IN ('h', 'he', 'hel', 'hell', 'hello', 'hello ', 'hello w',
'hello wo', 'hello wor', 'hello worl', 'hello world')
Это будет иметь потенциально лучшую производительность.Если это не сделать, то, конечно, это сложный SQL сделает это:
SELECT * FROM mytable WHERE mycol = 'h'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'he'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hel'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hell'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hello'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hello '
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hello w'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hello wo'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hello wor'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hello worl'
UNION ALL
SELECT * FROM mytable WHERE mycol = 'hello world'
Будет ли индекс будет использоваться здесь, если используется '= 1'? – hansmaad
Вы можете проверить с помощью 'EXPLAIN PLAN' на вашем экземпляре. Если нет, вы можете добавить 'AND mycol like 'h%'', что является избыточным, но может помочь движку обнаружить преимущество использования индекса. – trincot
Хорошая идея, я думаю о минимальной длине, так что я мог бы использовать дополнительный «hel%» – hansmaad