পলিগন ক্যোয়ারিতে পয়েন্টের জন্য জিআইএসটি সূচকের মাধ্যমে পারফরম্যান্স অর্জন


10

আমার দুটি সারণী রয়েছে: অবস্থানগুলি (আইডি, অঞ্চল_আইডি, দ্য_জুম) এবং অঞ্চলগুলি (আইডি, the_geom)। প্রতিটি অবস্থানের পয়েন্টের জন্য আমি এটিতে অবস্থিত অঞ্চলটি নির্ধারণ করতে চাই:

UPDATE locations SET region_id = 
 (SELECT id FROM regions 
  WHERE ST_Within(locations.the_geom,regions.the_geom)
 );

অবস্থান পয়েন্টগুলিতে জিআইএসটি সূচক তৈরি করা কি বোধগম্য? আমি অঞ্চল বহুভুজের উপর একটি সূচক তৈরি করব তবে আমি পয়েন্টগুলি সম্পর্কে নিশ্চিত নই। এটি কি ক্যোয়ারী গতি বাড়িয়ে দেবে?

উত্তর:


14

সংক্ষিপ্ত উত্তর: আপডেট কোয়েরি এই ধরনের সঙ্গে নং, আমরা প্রতিটি সারি আপডেট করছি 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.