我正在使用:Rails 3.2.13和PostgreSQL 9.4.7
我有2个产品表,from sys import getsizeof
>>> arr2 = np.ones((1000,1000))
>>> getsizeof(arr2)
8000112
>>> arr2 = np.ones((1000,1000),dtype='>i2')
>>> getsizeof(arr2)
2000112
和AProducts
两个表都有一个BProducts.
整数,它是一个索引列,两个表都有几百万个记录。
当我通过category_id
查询AProducts
时,响应很快并且使用索引,但是当我查询category_id
时,响应非常慢,并且它使用顺序扫描代替使用索引。我试图找出BProducts
发生这种情况的原因,因为表格和模型几乎是BProducts
的理想选择。以下是EXPLAIN的结果:
AProducts
上面的慢查询需要219696.7ms,并且不使用索引。以下针对AProduct的查询很快,并且使用索引。
irb(main):2290:0> BProduct.where(:category_id => 700).explain
BProduct Load (219696.7ms) SELECT "b_products".* FROM "b_products" WHERE "b_products"."category_id" = 700
EXPLAIN (1.3ms) EXPLAIN SELECT "b_products".* FROM "b_products" WHERE "b_products"."category_id" = 700
=> "EXPLAIN for: SELECT \"b_products\".* FROM \"b_products\" WHERE \"b_products\".\"category_id\" = 700\n QUERY PLAN\n-----------------------------------------------------------------------------\n Seq Scan on b_products (cost=0.00..1791663.25 rows=926 width=2036)\n Filter: (category_id = 700)\n(2 rows)\n"
我想弄清楚的是,我如何让我的BProduct查找使用索引并以与AProduct相同的速度获取记录,为什么不能默认行为I&#39我看到了?
答案 0 :(得分:0)
也许您的表格没有真正编入索引?
在rails控制台上检查:ActiveRecord::Base.connection.indexes(:table_name)
您也可以直接在postgres上执行此操作:SELECT indexname FROM pg_indexes;