「生の」PostGIS SQL クエリを Rails ActiveRecord クエリに変換しようとしています。私の目標は、2 つの連続した ActiveRecord クエリ (それぞれ約 1 ミリ秒かかる) を、(約 1 ミリ秒かかる) 単一の ActiveRecord クエリに変換することです。以下の SQL を使用してActiveRecord::Base.connection.execute
、時間の短縮を検証できました。
したがって、私の直接の要求は、このクエリを ActiveRecord クエリに変換するのを手伝ってくれることです (そして、それを実行するための最良の方法です)。
SELECT COUNT(*)
FROM "users"
INNER JOIN (
SELECT "centroid"
FROM "zip_caches"
WHERE "zip_caches"."postalcode" = '<postalcode>'
) AS "sub" ON ST_Intersects("users"."vendor_coverage", "sub"."centroid")
WHERE "users"."active" = 1;
<postalcode>
このクエリでは、値が唯一の変数データであることに注意してください。明らかに、ここには と の 2 つのモデルがUser
ありZipCache
ます。User
とは直接関係ありませんZipCache
。
現在の 2 ステップの ActiveRecord クエリは次のようになります。
zip = ZipCache.select(:centroid).where(postalcode: '<postalcode>').limit(1).first
User.where{st_intersects(vendor_coverage, zip.centroid)}.count