在開發中有一個Web應用程序;要求是提供搜索由PK/FK連接表相關的主表中重要領域以及其他領域網絡應用中多個字段的搜索策略
架構是這樣的
PROJECTS
projectID
projectTitle
projectTown
projectCountryID (FK to countries table)
agencyID (FK to agencies table)
COUNTRIES
countryID
countryName
AGENCIES
agencyID
agencyName
TAGS_PROJECTS (many-many relationship between tags and projects)
id
projectID
tagID
TAGS
tagID
tagName
,因此用戶輸入搜索詞單一搜索領域並且我們想要查看它是否發生在projects.projectTitle,projects.projectTown,countries.countryName,agencies.agencyName或tags.tagName中,用於分配給項目的任何標記
數據集將隨着時間的推移而增長項目表中的10,000-50,000行的順序,以及其他表中的000的順序
我打算建立一個測試平臺並運行不同方法的測試,但我想知道是否有人曾經處理類似的情況,並有任何建議提供?
我正在考慮,將測試的方法分別是:
單個查詢 我想這將有可能寫一個SQL查詢來進行搜索,但是這樣的查詢可能會不小心優化表現不佳一旦數據增長到全尺寸。問題是我不會在項目啓動後參與,所以不會有完整的,真實的數據進行實驗
多個查詢 由於網站和數據庫將輕微加載,一些小的查詢可能會在代碼最簡單快捷。將發出幾個SQL查詢,然後將每個搜索的結果集合併到PHP中。
冗餘搜索表 當我編輯項目時,我正在考慮將一行作爲手工索引編寫到另一個表中 - 這將從標記,國家,機構等相關字段的文本值中將它們連接成一個字符串並使用projectID將其粘貼到搜索表中;每個項目的項目表中都會有一行,基本上代表我們可以搜索的關鍵數據的非規範化視圖。
我已經看了一下使用MySQL的一些看法,但是對這些缺乏索引感到緊張;至少冗餘搜索表可以仔細索引
技術手 - PHP 5.1.6和MySQL 5.0.22在RHEL5
運行的任何想法,意見或戰爭的故事歡迎
感謝您的時間
伊恩
嗨Yanick,謝謝你。每次填充臨時表有什麼好處,這將需要我執行所有昂貴的連接,我試圖避免,每次運行查詢時?如果我想使用MyISAM的FULLTEXT功能,爲什麼不維護一個單獨的MyISAM表?謝謝,Ian – Polsonby 2010-09-03 07:59:32
@Flubba,JOIN語句並不昂貴,至少比FROM多個表更便宜...無論如何,是的,您可以使用AFTER INSERT/UPDATE/DELETE觸發器維護單獨的MyISAM表,或者您可以使用第三方搜索並在延遲的時間段後運行索引器。在任何情況下,維護獨立的啓用FULLTEXT的表格都不應該由您的項目本身完成,因此,如果您需要更改技術,您將無法完成搜索。 – 2010-09-03 19:24:32
有趣的想法,歡呼聲。 .. – Polsonby 2010-09-06 08:47:45