Где в запросе есть предложение FROM
?
Можно связать вызовы REPLACE
: REPLACE(REPLACE(..., 'a', 'b'), 'c', 'd'). Ditto for the
TRIM`.
Как уже упоминалось, подходит COLLATION
устраняет все потребности для UPPER()
и LOWER()
.Избегайте сопоставлений ...general...
, и вам будет предоставлено следующее: ss
= ß
.Многие, но не все, относятся к ij
= ij
и / или oe
= œ
и / или Aa
= Å
(и т. Д.);они тебе тоже нужны?Вот краткое изложение большинства ситуаций: http://mysql.rjweb.org/utf8_collations.html
Использование индекса FULLTEXT
позаботится о большинстве окончаний, которые вы проверяете, и при этом исключается большая часть вашего кода.
Вы показываете несколько слов во втором столбце.Это просто для показа?Если вам нужно выделить слова, у вас есть другие неприятные проблемы.
Это само по себе ускорит запрос примерно в 10 раз:
WHERE english LIKE 'ha%'
AND ... (whatever else you have)
То есть фильтрна первых 2 буквах с чем-то, что может использовать INDEX(english)
, в частности LIKE 'ha%'
для слова hate
.Поскольку вы, похоже, используете PHP, не должно возникнуть никаких проблем при встраивании этого в запрос.
Вот еще одна мысль о моем substring($word, 0, 2)
... Вместо того, чтобы специально использовать "2", посмотрите, будет ли floor(strlen($word)/2)
работать достаточно хорошо.Таким образом, «безупречно» будет протестировано LIKE 'flawl%'
и будет работать намного быстрее, чем даже в 10 раз.
Но другая проблема.Вы рубите и слово в таблице и слово, данное?Старайтесь не рубить слово в таблице.Чтобы обсудить это далее, пожалуйста, предоставьте записи в таблице для «недостатков», «недостатков», «безупречных», безупречных »и т. Д. Я не могу точно сказать, нужно ли вам пройти весь путь до« недостатков », но имеюразличные строки для различных форм.
Остерегайтесь некоторых очень коротких слов со странными формами.Возможно, вам нужно добавить дополнительные записи, чтобы SQL-запрос не был слишком запутанным.Они изменяют вторую букву: «ЛОЖЬ» и «ЛОЖЬ».Похоже, что есть даже общее слово, которое меняет первую букву.