Re: [問題] migration指令 add_index 是什麼

看板Ruby作者 (南洋大兜蟲)時間9年前 (2015/04/03 23:28), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/2 (看更多)
當你要尋找某個男生有多少女朋友,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
大兜是我啦 Kevin hahaha
04/04 08:12, 2F

04/04 08:14, , 3F
乾蝦:p
04/04 08:14, 3F
文章代碼(AID): #1L7h6Fi- (Ruby)
文章代碼(AID): #1L7h6Fi- (Ruby)