2013-03-06 41 views
0

我在我的數據庫中有幾個表,這將需要大量的連接,涉及的查詢和表會經常更新。我想問的問題有很多,涉及從mysql搜索過渡到獅身人面像搜索。獅身人面像或在連接表上的mysql

我想使用獅身人面像來執行查詢(不是全文搜索),因爲涉及大量的連接,MySQL引擎太慢。

所以我的第一個問題是,通過串聯將字段轉換爲文本是否有意義使用sphinx進行非全文搜索?

如果建議是使用sphinx,我該如何使用它來執行跨所有這些表的複雜查詢。我研究了很多,並提出了這三個備選方案,並希望您的意見是最佳的。

  1. 由於斯芬克斯沒有連接,去歸一化所有的表爲一個表(或視圖),然後運行上,該斯芬克斯索引器。這似乎是效率最低的方式,因爲它會導致數十億行,而且不涉及加入所有表的其他查詢將受到嚴重阻礙。
  2. 分別在每個表上創建sphinx索引。但是,這不允許我將這些索引用於需要連接表的查詢。爲了解決這個問題,在要加入的列上使用sql_joined_field,sphinx將執行加入過程。
  3. 將JOIN放入構建索引的sql_query中。這些表格保持標準化,但您在構建索引時會解除標準化。這似乎是一個很好的解決方案。但是父表上會有很多更新/刪除/插入。那麼,相應地更新spinx索引將會是一個棘手或乏味的業務,並且會在太多更新後長期影響性能?如何能夠關注父表中的更新並高效地修改sphinx索引。

我想知道什麼是解決問題的更好方法。對於長期的問題抱歉,但我想彙總我的研究結果,以便在接下來的答案中不再重複相同的事情。

回答

0

是的,我會建議3.

閱讀有關主+增量更新的方式來獲得快速更新索引(而無需重新構建整個索引)

http://sphinxsearch.com/docs/current.html#delta-updates

+0

感謝名單的建議。但我有一個疑問。從看起來,增量更新似乎是從一個表派生的索引,而不是從多個表中的聯合派生的索引。該技術可以用於我正在處理的那類問題嗎? – Legolas 2013-03-07 17:03:30

+0

是的,沒有理由不。我使用增量索引和4個表中的連接。使用計數器表的'過濾器'應該(不必)過濾列表中的第一個表,但它可以很好地連接其他表。 – barryhunter 2013-03-07 17:16:21