我在Oracle 11GR2中有一個簡單的搜索存儲過程,其中有超過160萬條記錄。我很困惑的事實是,如果我想在一個列內搜索一個工作,比如「%boston%」,那將需要12秒。我有一個關於名稱欄目的索引。Oracle字符串搜索性能問題
select description from travel_websites where name like "%boston%";
如果我只搜索一個以波士頓開頭的詞,如「boston%」,則只需要0.15秒。
select description from travel_websites where name like "boston%";
我增加了一個索引提示,並試圖迫使優化器使用我的索引上的姓名欄,它並沒有幫助。
select description /*+ index name_idx */ from travel_websites where name like "%boston%";
任何建議將不勝感激。
除了下面的答案,如果在文本列中存在關於搜索詞的位置的一致規則,則可以考慮基於函數的索引。例如。如果波士頓(或任何其他搜索術語)從位置X開始或在(第一,第二等)空間之後開始。然後將where謂詞與索引函數進行匹配可以導致使用該函數。 – Karl