2017-05-05 134 views
0

整理一張大桌子比方說,我有一個個人數據表Table1first_namelast_namedate_of_birthaddress。數百萬行。我應該創建哪些索引,以便能夠快速運行以下查詢:查詢和甲骨文12C

select * from Table1 where date_of_birth > some_date and contains(address,'some street') > 0 order by first_name offset 100 rows fetch next 5 rows only;

select * from Table1 where date_of_birth > some_date and contains(address,'some street') > 0 order by last_name offset 100 rows fetch next 5 rows;

這是一個簡化的情況,但我試圖搞清楚的是如何建立一個數據庫結構的網站類似易趣,即幾個排序順序,幾個數字參數和文字描述。我已經有address文本索引已經

+0

如果你添加一些東西你試過和如何查詢這將是更好表現(執行持續時間) –

+0

這對StackOverflow來說太寬泛了。除了其他事情之外,你還想如何使用eBay? – APC

+1

但你能評論我描述的情況嗎?只有一個表格和兩個排序順序。這是非常具體的 – Toolkit

回答

0

它取決於各種條件,如果索引是有用的或沒有。數據的

  • 分佈(在表格中的date_of_birth例如範圍)
  • 選擇參數(例如,與date_of_birth > 1900-01-01選擇)
  • 預期的結果集的選擇(通過順序)
  • 表大小
  • 您的數據庫環境
  • ...

在某些情況下,全表掃描是更好的選擇。

爲了確定這一點,你必須研究你的表的數據,檢查你的商業案例,調查執行計劃

在某些情況下,你可以提高你的SELECT語句。

例如

限制date_of_birth的範圍與上限。

where date_of_birth between some_date and some_date +7 

這不等同於你的SELECT語句(只在此範圍內按名稱排序),但也許不夠好,顯著提高性能

+0

我不認爲DB環境與這個問題有關。數據庫大小在後數百萬條記錄中提及。出生日期範圍也沒有太大的作用。你做過類似的任務嗎?你如何解決大集合的分類(或預分類)?假設你有1000萬條記錄,你搜索的查詢會給你帶來5000個,你想要得到5個。目前我正在使用預分類的mviews,但還有其他的選擇。請具體說明 – Toolkit

+0

對不起,但答案與您的問題一樣具體。數據庫環境設置與此問題有關(例如OPTIMIZER_INDEX_COST_ADJ)。如果您的表格包含date_of_birth,範圍爲1920-01-01至2017-01-01(均勻分配),並且您選擇了'date_of_birth> 01-01-1930',那麼date_of_birth上的索引將無用。 –

+0

OPTIMIZER_INDEX_COST_ADJ默認爲100%,date_of_birth是均勻分佈的。任何解決方案 – Toolkit