Re: [问题] migration指令 add_index 是什么

楼主: tonytonyjan (南洋大兜虫)   2015-04-03 23:28:07
当你要寻找某个男生有多少女朋友,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"
: 希望求解:)
作者: Angil ((我是叱石))   2015-04-04 08:12:00
大兜是我啦 Kevin hahaha

Links booklink

Contact Us: admin [ a t ] ucptt.com