Re: [問題] migration指令 add_index 是什麼
當你要尋找某個男生有多少女朋友,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://www.ptt.cc/bbs/Ruby/M.1428074895.A.B3E.html
推
04/04 01:47, , 1F
04/04 01:47, 1F
推
04/04 08:12, , 2F
04/04 08:12, 2F
→
04/04 08:14, , 3F
04/04 08:14, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章