#php #mysql #database #performance #database-performance
#php #mysql #База данных #Производительность #база данных-производительность
Вопрос:
Я относительно новичок в MySQL. У меня есть форум, и я пишу функцию поиска для этого. Запрос получает все записи форума. Я хочу объединить алгоритм поиска [similar_text() amp; soundex()].
Мой вопрос сейчас из-за производительности. Лучше ли теперь, когда я собираюсь сохранить код soundex в базе данных, когда я пишу новую запись в datasae? Или из-за производительности лучше переводить каждую запись в soundex()?
Я использую фреймворк symfony2.
Ответ №1:
Алгоритм soundex был разработан для индексации англосаксонских фамилий по их звучанию, когда они произносятся на английском языке. Если вы пытаетесь индексировать текст форума — что-то вроде вопросов и ответов в StackOverflow — вместо имен, это, вероятно, не лучший выбор. Вместо этого посмотрите на полнотекстовый поиск.
Сказав это, если вам случится индексировать фамилии, вы почти наверняка получите лучшую производительность, сохранив кодировку. В идеале вы должны включить ограничение ПРОВЕРКИ, чтобы гарантировать, что кодировка будет обновлена при изменении имени, но MySQL не применяет ограничения проверки. Вам нужно будет написать триггеры, чтобы синхронизировать два столбца.
Альтернативой на большинстве платформ было бы создание индекса по значению, возвращаемому soundex() (или любой другой функцией, которую вы используете). Что-то вроде create index on your_table (soundex(your_column));
. Но MySQL не поддерживает индексы в выражениях.