সংক্ষিপ্ত উত্তর: আপডেট কোয়েরি এই ধরনের সঙ্গে নং, আমরা প্রতিটি সারি আপডেট করছি locations
( "seq স্ক্যান"), এবং উপর সারকথা সূচক the_geom
মধ্যে regions
সীমা সারি সাহায্য যথেষ্ট ST_Within
যুগল-আপ থেকে সরাসরি সারিতে শর্ত regions
।
দীর্ঘ উত্তর: এটি অনুসন্ধান করার যাদুটি হ'ল ব্যাখ্যা কোয়েরি থেকে আপনি যা পান তা তুলনা করা । পিজিএডমিন তৃতীয় থেকে, কোয়েরি সম্পাদকের শীর্ষে একটি "ক্যোয়ারী ব্যাখ্যা করুন" বাটন আছে বা পিএসএসকিএল থেকে আপনার জিজ্ঞাসাকে "ব্যাখ্যা" দিয়ে প্রিফিক্স করুন:
postgis=# explain UPDATE locations SET region_id =
postgis-# (SELECT id FROM regions
postgis(# WHERE ST_Within(locations.the_geom, regions.the_geom)
postgis(# );
QUERY PLAN
--------------------------------------------------------------------------------------------
Seq Scan on locations (cost=0.00..8755.54 rows=1000 width=110)
SubPlan 1
-> Index Scan using regions_gist_the_geom on regions (cost=0.00..8.52 rows=1 width=4)
Index Cond: ($0 && the_geom)
Filter: _st_within($0, the_geom)
(5 rows)
এখানে যে আপত্তি আছে তা আপনার বোঝার দরকার নেই। এখানে দেখার মূল বিষয়টি হ'ল অভ্যন্তরীণ অংশে (সাবপ্ল্যান 1) এটি "সূচক" (= একটি সূচক ব্যবহার করে, যা জিনিসগুলিকে যথেষ্ট গতি বাড়িয়ে তুলতে পারে) নির্দেশ করে, এবং "সিক স্ক্যান" (= সিকোয়েন্স স্ক্যান) নয়, অর্থাৎ প্রতিটি পরীক্ষা করে দেখায় এটির মধ্যে রয়েছে কিনা তা সারি, যা ধীর হতে পারে)। আপনি যদি একটি জিআইএসটি সূচক যুক্ত / মুছে ফেলেন তবে locations
এই ব্যাখ্যা ক্যোয়ারীর আউটপুট হুবহু একই, সুতরাং ক্যোয়ারীর কার্য সম্পাদন একই হওয়া উচিত।
তবে আপনি যদি নির্বোধ কিছু করেন এবং আপনার জিআইএসটি সূচকটি সরিয়ে ফেলেন regions
, আপনি উপরের মত একই ক্যোয়ারী থেকে একটি পৃথক ক্যোয়ারী পরিকল্পনা দেখতে পাবেন:
QUERY PLAN
---------------------------------------------------------------------
Seq Scan on locations (cost=0.00..74288.00 rows=1000 width=110)
SubPlan 1
-> Seq Scan on regions (cost=0.00..74.05 rows=1 width=4)
Filter: (($0 && the_geom) AND _st_within($0, the_geom))
(4 rows)
দু'টি ব্যাখ্যা জিজ্ঞাসার মধ্যে গুরুত্বপূর্ণ বিষয়টি হ'ল সর্বাধিক ব্যয়ের প্রাক্কলন contrast