在Rails中,我一直在尝试构建数据库索引来加速我的查询,但我经常发现在运行迁移后我的数据库构建新的数据库,它仍然没有使用我正在构建的索引(甚至虽然对我来说,对于特定的查询来说,它们似乎是完美的。)
Rails中是否有工具可以搜索系统并识别需要创建的特定索引以获得最佳性能?
如果没有,是否有任何特定的规则来确定我的数据库没有使用我精心设计的索引的原因?
基本上,我的问题是:如何避免我当前的流程,即1)运行迁移创建一堆可能的索引,2)发现它们不起作用,3)回滚并感觉稍微沮丧在我的数据库明显的近视?
答案 0 :(得分:2)
好吧,如果您的所有查询都是 SELECT * FROM 的形式,则索引可能不会被使用。首先调整查询,这样您只返回每个视图所需的数据,然后从那里构建索引。
此外,您可以在数据库中为每个查询运行EXPLAIN,这将比Ruby社区提供的任何gem /插件更具启发性。
答案 1 :(得分:0)
您能提供一些慢查询和当前架构和索引的示例吗?
答案 2 :(得分:0)
签出https://github.com/eladmeidar/rails_indexes,扫描缺失的索引。
与查询效率相关,但不一定是索引https://github.com/flyerhzm/bullet,它会通知您N + 1查询和急切加载机会等事项。