我想在某個表或數據庫視圖中搜索某個句子(單詞組合)。我不想使用DB的Fultext搜索屬性。有沒有其他有效的方法?如何在數據庫中有效地搜索數據,除了使用全文搜索
回答
如果不使用索引,數據庫必須執行「全表掃描」。這就好像你一頁一頁地翻閱一本書來找到你需要的東西。
這就是說,電腦比人類快很多。這真的取決於你的系統有多少負載。使用MySQL,我們成功地實現了一個關於潛在客戶信息表的搜索系統。問題的本質是一般的索引無法解決的問題(包括全文)。所以我們設計它使用全表掃描供電。
這涉及到創建儘可能窄的搜索數據表,並將它們與相關但未搜索的數據連接到較大的表。
當時(4年前),可以在0.06秒內掃描100,000條記錄。 1,000,000條記錄耗時約0.6秒。該系統仍處於大量生產使用狀態,擁有數百萬條記錄。
如果您的數據需要超過6位數的記錄,您可能需要使用全文索引重新評估,或對倒排索引進行一些研究。
如果您想了解更多信息,請發表評論。
編輯:搜索表被保持儘可能窄。理想情況下每個記錄50-100個字節。如果你可以使用ENUMS和TINYINT來以另一種方式「映射」字符串值,那麼ENUMS和TINYINT是非常好的空間保存器。
搜索查詢是使用PHP類生成的。他們是簡單的:
-- DataTable is the big table that holds all of the data
-- SearchTable is the narrow table that holds the bits of searchable data
SELECT
MainTable.ID,
MainTable.Name,
MainTable.Whatever
FROM
MainTable, SearchTable
WHERE
MainTable.ID = SearchTable.ID
AND SearchTable.State IN ('PA', 'DE')
AND SearchTable.Age < 40
AND SearchTable.Status = 3
從本質上講,這兩個表中加入了一個主鍵(快速),並過濾通過全表掃描的SearchTable(非常快)來完成。我們正在使用MySQL。
我們發現,通過在MyISAM表中記錄格式==「FIXED」,我們可以將性能提高3倍。這意味着沒有斑點,沒有變種等...
讓我知道這是否有幫助。
沒有像全文搜索那樣有效。
基本上它歸結爲其中與像衍生物和因爲索引倒去在大多數場景中,它成爲一個非常昂貴的查詢。
如果您使用的是Java有在看Lucene
如果您使用的是.NET,你可以在Lucene.net看看,就會對數據庫進行搜索查詢中調用最小化。
從http://incubator.apache.org/lucene.net/
Lucene.Net以下是源代碼, 類每類,API-每API和Java Lucene的 搜索引擎的 algorithmatic端口到C#和.NET 平臺利用Microsoft .NET 框架。
Lucene.Net堅持使用原始Java 實現Lucene的API和 類。 API 名稱以及類名稱保留 Lucene.Net的外觀和感覺的C# 語言和.NET框架。例如, 示例中,Java實現中的方法Hits.length()在 中現在讀取的數目爲 Hits.Length()在C#端口中。
除了C#的API和類 端口,Java 的算法Lucene被移植到C#Lucene。這 意味着用Java創建的索引 Lucene與C#Lucene來回兼容 ;在閱讀時, 寫作和更新。事實上,可以同時搜索Lucene 索引,並使用Java Lucene和C# Lucene過程更新 。
你可以將文本分解爲單獨的單詞,將它們粘貼在單獨的表格中,然後使用它來查找包含搜索句子中所有單詞的PK ID。但不一定按照正確的順序],然後搜索這些句子的那些行。應該避免每次都做一次表掃描。
如果你需要我進一步解釋請查詢
- 1. 如何在H2數據庫中使用全文搜索?
- 2. 全文搜索數據集
- 3. 用zend搜索數據庫搜索lucene
- 4. Django的:有效的數據庫搜索
- 5. 在數據庫中搜索
- 6. 全文搜索vs標準數據庫搜索
- 7. 如何使用uuid搜索數據庫?
- 8. 如何使用PHP搜索欄檢索MySQL數據庫數據
- 9. 在數據庫中搜索結構化數據(全文+查詢)
- 10. 搜索數據庫
- 11. 搜索數據庫
- 12. 搜索數據庫
- 13. 使用jTextField在數據庫中搜索
- 14. 在Android中使用數據庫實現搜索搜索
- 15. 如何使用Django在數據庫中搜索數據?
- 16. 如何在Google數據存儲中有效地搜索實體
- 17. 在數據庫中搜索數據。 PHP
- 18. 如何在Firebase數據庫中搜索?
- 19. 在H2數據庫中使用JPA(Eclipselink)執行全文搜索
- 20. 如何在Mysql數據庫中搜索多個詞搜索
- 21. 如何在數據庫中實現全文搜索
- 22. 使用Java搜索SQL數據庫(多文本字段搜索)
- 23. 如何在mysql數據庫中搜索數據並使用C#在DataGridView中添加搜索數據?
- 24. Android - 使用現有數據庫的全文搜索
- 25. 全文搜索在沒有數據庫的php中
- 26. 如何在彈性搜索中搜索所有數據
- 27. 用mysql搜索最近的數據,用solr全文搜索舊數據
- 28. 如何使用Linq從數據庫中搜索數據
- 29. 如何高效地搜索子數據集的大數據集?
- 30. 如何使用文本框在ASP.NET中搜索數據庫
你不必限於JVM採取Lucene的優勢 - 您可以使用Solr的是圍繞Lucene的一個HTTP包裝。我已經與Solr取得了巨大的成功:http://lucene.apache.org/solr/ – 2009-02-13 07:05:19
這太好了,不知道'回合,謝謝科迪! – renegadeMind 2009-02-13 07:27:48