作者tonytonyjan (南洋大兜蟲)
看板Ruby
標題Re: [問題] migration指令 add_index 是什麼
時間Fri Apr 3 23:28:07 2015
當你要尋找某個男生有多少女朋友,SQL 會這樣寫:
SELECT * FROM girls WHERE boy_id = '1';
如果沒有建立索引,資料庫會從 girls 表的第一筆搜到最後一筆,
這做法很直觀,但當表很大時速度會很慢,有十萬筆就會執行比較十萬次。
建立索引(index)是在該欄位建立 B-tree,這是資工領域的名詞,
如果你想更加瞭解,可以去看看 wiki 或參考書局裡面「資料結構」的書。
簡單的說,以沒有索引的情況下,一百萬筆資料要找一筆你要的東西,
至多需要執行一百萬次的比較。
但若建立 B-tree,至多只需要 20 次(但犧牲的是寫入時間與硬碟空間)
另外這裏有勘誤表:
http://tonytonyjan.net/rails-road/
希望有幫助到你 =)
※ 引述《Angil ((我是叱石))》之銘言:
: 小弟rails新手,最近在讀"ruby on rails自習手冊"
: 其中一段,當想要讓兩個table產生關聯時,辦法是加入foreign_key
: 譬如現在有兩個table: boys跟girls
: 我要一個boy對應多個girls所以我下以下指令
: rails generate migration add_boy_id_to_girls boy_id:integer:index
: class AddBoyIdToGirls < ActiveRecord::Migration
: def change
: add_reference :girls, :boy, index: true
: end
: end
: 作者說其實migration檔的內容等同於
: class AddBoyIdToGirls < ActiveRecord::Migration
: def change
: add_column :girls, :boy_id, :integer
: add_index :girls, :boy_id
: end
: end
: 不解的地方是已經新增boy_id這個欄位可以產生關聯了
: 為什麼還要add_index,我不了解add_index是什麼意思
: 還有schema裡多這行是什麼意思
: add_index "girls", ["boy_id"], name: "index_girls_on_boy_id"
: 希望求解:)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.219.118.91
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Ruby/M.1428074895.A.B3E.html
1F:推 Mtcat: 04/04 01:47
2F:推 Angil: 大兜是我啦 Kevin hahaha 04/04 08:12
3F:→ Angil: 乾蝦:p 04/04 08:14