Ну, вы всегда можете попробовать WHERE textcolumn LIKE "%SUBSTRING%"
- но это гарантированно будет довольно медленно, поскольку ваш запрос не может выполнить индексное совпадение, потому что вы ищете символы слева.
Этозависит от типа поля - текстовая область обычно не сохраняется как VARCHAR, а скорее как (своего рода) поле TEXT, поэтому вы можете использовать оператор MATCH AGAINST .
Toчтобы получить столбцы, которые не совпадают, просто поставьте NOT перед следующим: WHERE textcolumn NOT LIKE "%SUBSTRING%"
.
Независимо от того, чувствителен ли поиск к регистру или нет, зависит от того, как вы храните данные, особенно от того, какой COLLATION выиспользовать.По умолчанию поиск будет выполняться без учета регистра.
Обновленный ответ для отражения обновления вопроса:
Я говорю, что выполнение WHERE field LIKE "%value%"
выполняется медленнее, чем WHERE field LIKE "value%"
, если поле столбца содержитиндекс, но это все еще значительно быстрее, чем получение всех значений и фильтра вашего приложения.Оба сценария:
1 / Если вы сделаете SELECT field FROM table WHERE field LIKE "%value%"
, MySQL будет сканировать всю таблицу и отправлять только поля, содержащие «значение».
2 / Если вы делаете SELECT field FROM table
итогда ваше приложение (в вашем случае PHP) отфильтровывает только строки с «значением», MySQL также просканирует всю таблицу, но отправит все поля в PHP, который затем должен выполнить дополнительную работу.Это намного медленнее, чем в случае № 1.
Решение: Пожалуйста, используйте предложение WHERE
и используйте EXPLAIN
, чтобы увидеть производительность.