Я создал фото-сайт знаменитостей. После получения 100 000 фотографий мои любительские навыки начали проявляться и нуждаются в быстром оттачивании. Некоторые простые запросы возвращаются за 5-10 секунд!
У меня есть функция поиска в одном текстовом поле, которая будет искать в таблице «фотографии» (заголовок и заголовок), в таблице «люди», в таблице «ключевые слова» и в таблице «photoContributor». Существуют две реляционные / ассоциативные таблицы для "people" и "ключевых слов", называемые photoPeople и photoKeyword.
Один из возможных поисковых запросов пользователя:
«Солнцезащитные очки Брэда Питта Анджелины Джоли @MG» - здесь должны быть возвращены все фотографии, которые содержат Брэда и Анджелину вместе, где солнцезащитные очки могут быть просмотрены и сделаны автором @ MG.
Вскоре я понял, что не могу использовать INDEX для моих полей "caption" и "headline" в таблице "photos", потому что я использую предложение "LIKE" с префиксом "%", и что эти конкретные поля установлены в тип данных "LONGTEXT". Поскольку у меня нет индексов для этих полей, это приводит к огромному времени возврата. Поэтому я считаю, что мне нужно использовать поиск «FULLTEXT», затем я могу установить для полей «заголовок» и «заголовок» значение VARCHAR (2000), так как самый большой заголовок на сегодняшний день составляет 1991 символов, и при этом все еще использую «INDEX» особенность, которая, мы надеемся, ускорит процесс. Мне также нравится логическая функция для удаления слов из поиска.
Причина, по которой я пишу этот вопрос, заключается в том, что я совершенно бесполезен в "JOINS". Я, вероятно, могу написать запрос «FULLTEXT» для одной таблицы, и я, возможно, смогу объединить две таблицы, используя левое или правое соединение ... но поскольку у меня есть таблицы ассоциаций / реляционных таблиц, я действительно очень запутался.
Буду признателен, если кто-нибудь представит мне пример запроса с использованием объединений и полнотекстовых данных и реляционных таблиц или просто объяснит мне, какие объединения использовать, если таковые имеются, и любые советы, которые у вас есть для полнотекстового поиска. структура базы данных у меня есть.
Ниже приведена моя базовая схема базы данных:
photos (tbl)
photoID INT(11) Primary Auto-Increment
headline Long-Text
caption Long-Text
dateCreated DateTime
people (tbl)
peopleID INT(11) Primary Auto-Increment
people VarChar(255)
photoPeople (tbl)
photoID INT(11)
peopleID INT(11)
keywords (tbl)
keywordID INT(11) Primary Auto-Increment
keyword VarChar(255)
photoKeyword (tbl)
photoID INT(11)
keywordID INT(11)
photoContributor (tbl)
photoID INT(11)
contributorRef VarChar(100)
Когда выполняется поиск, запрашиваемые таблицы / поля:
photos.headline, photos.caption, Keywords.keyword, people.people, photoContributor.contributorRef.
Я надеюсь, что кто-нибудь может помочь мне в создании этого срочного запроса.