Если вы хотите ускорить запрос, вам нужно избегать совпадений с шаблонами, которые начинаются с %
. Для этого вам нужно добавить некоторую избыточность, чтобы второе значение оставалось в отдельном столбце.
Таким образом, ваша таблица должна выглядеть так:
full_ticker ticker
----------- ------
NYSE:MSFT MSFT
NYSE:AAPL AAPL
AMT:STZ STZ
^SPX ^SPX
JMAT JMAT
Простое манипулирование строкой приведет к второй (новый) столбец; для 100 тыс. строк это не займет времени.
Теперь вы можете создать два индекса, по одному на столбец:
create index ix1 on stocks (full_ticker);
create index ix2 on stocks (ticker);
Наконец, когда поиск приходит в с двоеточием , затем используйте первый индекс:
select * from stocks where full_ticker like $string.'%'
Если поиск попадает в без двоеточия , используйте второй индекс:
select * from stocks where ticker like $string.'%'
Обратите внимание, что оба при поиске избегайте использования %
в начале шаблона. Таким образом, ваши запросы будут использовать индексы и будут работать быстро.
Последнее замечание: Другой вариант - создать второй избыточный столбец как «виртуальный столбец»; виртуальные столбцы могут быть проиндексированы для получения того же опыта, который я подробно описал здесь. Просто подумай.