Ответ 1
Ну, вы всегда можете попробовать WHERE textcolumn LIKE "%SUBSTRING%"
- но это гарантированно будет довольно медленным, так как ваш запрос не может выполнить индексное совпадение, потому что вы ищете символы с левой стороны.
Это зависит от типа поля: текстовое поле обычно не сохраняется как VARCHAR, а скорее как (своеобразное) поле TEXT, поэтому вы можете использовать MATCH AGAINST.
Чтобы получить столбцы, которые не совпадают, просто поставьте 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
, чтобы увидеть производительность.