2011-11-18 139 views
0

我正在構建一個rails項目,並且我有一個包含500k和1M行之間的一組表格的數據庫,並且我不斷創建新行。優化通過Rails數據庫搜索

由於項目的性質,在每次創建之前,我必須在表格中搜索重複項(對於一個字段),因此我不會創建兩次相同的行。不幸的是,隨着我的桌子不斷增長,這需要越來越長的時間。

我在想,我可以優化搜索通過添加索引到特定的字符串字段,通過我正在尋找..但我聽說添加索引增加創建時間。

所以我的問題如下: 查找和創建包含索引字段的行的交易是什麼?我知道向這些字段添加索引會使我的程序在Model.find_by_name時速度更快,但是它會使我的行創建速度降低多少?

回答

1

索引減慢項insertation,因爲它需要將項添加到索引,並且需要一些ressources但一旦加入,他們加快你的SELECT查詢,這就是像你說的也許B樹心不是正確的爲你選擇!因爲B-Tree索引索引主題的前X個單元。當你有整數時,這很好,但是文本搜索很棘手。當你查詢,如

Model.where("name LIKE ?", "#{params[:name]}%") 

會加快的選擇,但是當你使用的查詢是這樣的:

Model.where("name LIKE ?", "%#{params[:name]}%") 

它不會幫你,因爲你要搜索整個字符串,它可以長一些百個字符,然後它不是一個有250個字符長字符串索引的前8個單元的改進!所以這就是一件事。但theres另一....

你應該添加一個唯一的索引,因爲數據庫更好地發現重複,然後紅寶石是!它針對分類進行了優化,並確定了處理這個問題的更簡潔更簡單的方法!因爲你也應該爲相關模型添加一個驗證,但這不是讓數據庫與之相關的原因。

//有關索引速度

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

你沒有一個大組選項。當你只需要一個索引時,我不認爲插入速度的損失會很大!但是選擇速度會增加!

+0

感謝您的幫助,但如果我確實添加了一個唯一的索引,它會在多大程度上減緩插入?我擔心它會讓我的程序變慢,所以如果沒有獨特的索引,它會更好。 – BananaNeil

+0

查看帖子更新! – davidb

+0

誰對我的(已被接受的)文章投了反對票並對此一無所知? – davidb