用MySQL表示,如果movies
表有20000條記錄,並且每條記錄都有一個字段是電影的描述,最長可達2k字節。我們如何在描述中搜索帶有「自然」一詞的電影?如果可能的話,它會很快,而不是通過所有20,000條記錄。 (如果在其他情況下,如書籍,其中n
可以是200,000或更多)。在MySQL中,如果電影表具有描述字段,那麼如何對此描述進行搜索?
1
A
回答
4
我不會直接處理說明列 - 關於選擇的每行功能很少能很好地擴展。我訂閱的準則之一是不需要在列內處理東西(類似於您的案例中的描述,或逗號分隔變量列的部分或甚至名稱(第一/最後)和地址(街道/城鎮/州) 組件)。如果你這樣做,通常是更有效的方法。
我會做的是在表上插入,更新和刪除觸發器。對於插入/更新觸發器,我會填充沿着DescLookup
下面幾行另一個表:
Movies:
Id primary key
Title
Description
DescLookup:
Word
MovieId foreign key Movies(Id)
Count
primary key (Word,MovieId)
index (MovieId)
基本上,在描述(每個非干擾詞即打折之類的東西and
,or
,by
,標點符號,單字母單詞等),您會在此表中獲得一個條目(使用較低的單詞)。
確保觸發器在重新填充之前刪除該MovieId
的所有當前行,以免留下不正確的信息。
然後您使用該表來運行您的查詢。這會將查找單詞的「成本」移動到插入/更新中,而不是每一次選擇,都會大大降低成本。這很有效,因爲大部分數據庫的讀取次數遠遠多於寫入次數,所以將成本轉移到寫入部分是個不錯的主意。
請記住,爲此需要額外的存儲空間,但如果您檢查人們對數據庫詢問的大量問題,「我該如何快速執行此操作?」遠遠超過「我如何使用更少的磁盤空間?」。
而刪除觸發器將簡單地刪除DescLookup
表中的所有條目以及相關的MovieId
。
因爲Word
列索引(還有如你的要求,你會不會被搜索每一個描述字段),它的搜索將是快如閃電。這是因爲:
select MovieId from DescLookup where Word = 'nature';
會吹:
select Id from Movies where lower(Description) like '%nature%';
出來的水。
2
在這種情況下,您希望使用全文搜索索引。要知道,有一些漁獲不過,如最小的字,長度,停止字等
對FTS的語法如下:
WHERE MATCH (field) AGAINST ('text');
相關問題
- 1. 在所有表中搜索列描述描述元
- 2. 在描述中搜索
- 3. mysql描述表 - 連接字段?
- 4. 結果表描述
- 5. 如在描述
- 6. 通過描述搜索
- 7. 段描述符與門描述符
- 8. 在列描述中搜索文本
- 9. 如何刮取谷歌搜索結果中的描述
- 10. 如何在mysql中存儲這些字段描述?
- 11. 如何訪問mysql表字段模式描述列?
- 12. 存儲字段描述
- 13. 新標準字段「描述」
- 14. Rails:Formtastic字段與描述
- 15. 讓MySQL表列描述
- 16. 如何在JNI中找到對象的字段描述符?
- 17. 如何顯示jmx MBean的類描述,屬性描述和操作描述
- 18. 如何確定帖子的搜索片段和meta「描述」?
- 19. 如何搜索Perforce中變更列表描述的文本?
- 20. 如何將元描述拖入搜索結果
- 21. 如何自定義DotNetNuke的搜索結果描述?
- 22. 在線搜索Prolog語言描述
- 23. VBA:如何描述具有特定字符串的行
- 24. 用%@描述對象(如UIButton,UIView,NSString,NSDictionary)的NSLog描述
- 25. 那麼Zend_Feed 「描述密鑰丟失」
- 26. 描述文本在文本字段中?
- 27. 在Slick中描述可選字段
- 28. 在Visual Studio中缺少字段描述
- 29. 如何設計一個字段有很多描述的SQL表
- 30. RecordEditor - 字段描述該行的佈局
這是一個非常酷的方法,但我猜OP已經有他的表填充。你能否建議一種方法讓他從他現在的東西中產生起始數據集? – Drew 2010-05-25 04:59:29
是的,創建輔助表,設置插入/更新觸發器,然後執行:'更新電影設置desc = desc;'。這應該激發數據庫中每一行的觸發器。如果你的數據庫管理系統是如此聰明(或者鬼鬼祟祟的,IMNSHO),以至於不能認識到這是一個真正的更新,只需要:'更新電影集desc =''|| desc;更新電影集desc = substr(desc,2);'或類似的東西。 – paxdiablo 2010-05-25 05:03:26