我有一個大量列(~60)的表,它最終會有大量的行(~10 000),而我' m需要能夠一次高效地搜索多個列值。我不確定搜索是否完全匹配(LIKE 'value'
,而不是LIKE '%value%'
),但LIKE 'value%'
可能是一個可以接受的折衷方案。如何在大量列上構建快速搜索表
已經提出了一些解決方案。我不是很熟悉數據庫的設計原則,所以它不是很明顯對我來說這是最好的:分別對每列
指數。用戶將能夠搜索任何列的組合,因此不會有更復雜的索引工作。讀取的數據量比寫入數據庫要多得多,因此寫入速度放緩不應該成爲問題。
讓另一個表只是用於搜索,看起來像這樣:
obj_id col_num col_name col_value ------------------------------------- 1 1 'name' 'joe' 1 2 'job' 'engineer' 2 1 'name' 'bill'
等等。我覺得爲col_num和COL_NAME列是多餘的,但 大概一個比別人更優秀。我不知道這是什麼 叫,雖然它聽起來像Entity-Attribute-Value model(也見this question)。從我所知道的情況來看,與EAV模型的主要區別在於此表格不會是 稀疏;所有實體將具有大部分或全部屬性。
在第一張桌子上做一個inverted index的另一張桌子。我知道如何在理論上做到這一點,但這將是一項巨大的工作。另外,我們可能會失去每個數據來自哪個列的信息,這並不是很好。此外,這感覺像解決方案1將是多餘的,但我實際上不知道如何創建表索引。
這些是我們到目前爲止提出的解決方案。如果它是相關的,我們使用的是Oracle數據庫,它不是真正可選的,但我有權限以任何必要的方式重構數據庫。那麼,這裏最好的解決方案是什麼?當然,「以上都不是」完全可以接受的答案。這些表格實際上還沒有存在,所以沒有什麼可以消除並重新制作。
謝謝!
優秀解答一切!我希望我可以同時接受他們。謝謝! – andronikus