我建立了一個名人照片網站。在達到10萬張照片後,我的業餘技能已經開始出現,需要很快磨光。一些簡單的查詢需要5-10秒才能返回!MySQL全文搜索並加入
我有一個文本框搜索功能,它將搜索「照片」表(標題和標題),「人」表,「關鍵字」表和「photoContributor」表。 「人」和「關鍵字」有兩個關係/關聯表,分別稱爲「photoPeople」和「photoKeyword」。
一個可能的用戶搜索結果可能是: 「Brad Pitt Angelina Jolie太陽鏡@MG」 - 這將返回包含Brad和Angelina在一起的所有照片,其中太陽鏡可以被貢獻者@MG看到和拍攝。
我很快就意識到我無法在「照片」表的「標題」和「標題」字段中使用INDEX,因爲我使用帶有「%」前綴的「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。
我希望有人能幫助我建立這個緊急查詢。
全文索引只能在MyISAM表上使用。 InnoDB支持他們從未(以及事情發展的方式,可能永遠不會)。 –
我的表正在使用MyISAM引擎,這是否有助於我的原因..? – TheCarver