這是用於在線照片庫的。我有兩張桌子; 「photoSearch」和「照片」。第一個「photoSearch」只有幾列,包含照片的所有可搜索數據,如「photoID」,「標題」,「標題」,「人物」,「dateCaptured」和「關鍵字」。它有一個多列全文索引(標題,標題,人物,關鍵字)。第二個表格「照片」包含所有照片數據;高度,寬度,版權,標題,ID,日期等等。兩者都有500K +行,標題和標題字段有時會返回2000+個字符。 (注意事項:我不能在全文搜索中使用連接,因此關鍵字存儲在一個列中 - 在一個「非規範化」表中。此外,這種類型的僞代碼因爲我的應用程序代碼在其他地方 - 但它很接近)如何將這兩個查詢合併爲一個優化查詢以避免選擇N + 1
這個特定的查詢正在通過與循環內循環,正在執行另一個SQL語句...
SELECT photoID FROM photoSearch
WHERE MATCH (headline, caption, people, keywords)
AGAINST ('"&booleanSearchStr&"' IN BOOLEAN MODE)
AND dateCaptured BETWEEN '"&fromDate&"' AND '"&toDate&"';"
這是正在執行的SQL語句對於上面查詢中的每一行:
SELECT photoID, setID, eventID, locationID, headline, caption, instructions, dateCaptured, dateUploaded, status, uploaderID, thumbH, thumbW, previewH, previewW, + more
FROM photos
LEFT JOIN events AS e USING (eventID)
LEFT JOIN location AS l USING (locationID)
WHERE photoID = " & photoID & ";"
當測試時,在其自己的表格上使用全文索引時,「photoSearch」而不是大表格「照片」似乎在一定程度上提高了速度。我沒有添加「photoSearch」表,它已經存在 - 這不是我的應用程序。如果我嘗試加入這兩個表以失去第二個查詢,那麼我會一起丟失索引,導致很長時間 - 所以我無法使用全文連接。這似乎是最快的方法。如果不是全文和加入問題,我已經將這兩個查詢結合起來了。
是否有可能將這兩個查詢合併爲一個,以使進程運行更有效率,而不是對查詢1中的每個結果執行1000次查詢#2?
才能添加您嘗試加入的SQL? – 2012-07-07 05:38:43