一、索引对数据库性能的影响
1.索引的优缺点
优点:索引可以改善数据库检索(查询)的性能
缺点:创建索引会额外占用数据库的空间,使用索引会损害数据插入、删除和更新的性能。
二、索引的使用场景
如果收集的数据量虽然比较大,但实际检索频率不高,其实没有必要创建和使用索引。
如果数据量不大,也没有必要创建索引。
三、索引的添加和删除
在rails中可以在迁移文件中使用add_index和remove_index分别来添加和删除索引,运行迁移来更新数据库模式(schema)。
此外,在迁移之外我们也可以处理模式(schema),因此我们可以构建方法来根据需要进行索引的创建和删除。
例如在模型中定义如下方法:
def run_with_index(*columns)
connection.add_index(:orders, *columns) #连接数据库,在orders表中的指定字段上添加索引
begin
yield
ensure
connection.remove_index(:orders, *columns) #连接数据库,删除在orders表中的指定字段上的索引
end
end
然后在下面的模型统计数据的get_city_statistics方法中调用上述方法
def get_city_statistics
run_with_index(:city) do #在orders表的city字段上操作索引
#…… 统计计算的代码
end
end
四、参考资料
1.《Rails5敏捷开发》第22章第6节–在迁移外部处理模式
2.《MySQL必知必会》第30章–改善性能