作者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/cn.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