আমার কাছে 50K সারি সহ একটি টেবিল রয়েছে। এটি আসলে একটি পোস্টজিআইএস টেবিল।
ক্যোয়ারিতে 4 টি অংশ রয়েছে (1 বাধ্যতামূলক) (3 টি ptionচ্ছিক)
- ছেদযুক্ত বাক্স (একটি ভূগোলের আয়তক্ষেত্র) 4 লম্বা, দীর্ঘ (আমি st_intersects ব্যবহার করি) সহ [আবশ্যক]
- তারিখের ক্ষেত্রে তারিখের সীমা (সর্বনিম্ন, সর্বাধিক)
- ফাইল টাইপ (বর্তমানে 8 টি পাঠ্য মানগুলির একটি সেট) IN (.....) ব্যবহার করছে তবে প্রয়োজনে আমি এটি একটি টেম্প টেবিল তৈরি করতে পারি। আমি দেখছি অনেক লোক IN পছন্দ করে না।
- দেশ (একটি পাঠ্য মান)।
আমি প্রায় 100 - 4,000 সারি প্রত্যাশা করি
আমি যদি টেবিলের উপর একটি যৌগিক সূচক তৈরি করি তবে আমার প্রথমে কোন কলামটি ব্যবহার করা উচিত। জরিমানাযুক্ত দানা সম্ভবত অবস্থান (তথ্য সারা বিশ্বে ছড়িয়ে পড়ে)। আমার কাছে এটি বর্তমানে জিআইএসটি সূচক হিসাবে রয়েছে।
অন্যান্য সূচকগুলি বিটিআরই হবে।
আমার অন্তর্নিহিততা সূক্ষ্ম দানাদার ব্যবহার করুন, এবং অবশ্যই শেষ। যেমন এখানে প্রায় 12 টি ফাইল ধরণের রয়েছে, সুতরাং এটি সূচকের জন্য খুব বড় বালতি হবে।
পোস্টগ্রিসএসকিউএল এবং পোস্টজিআইএস গুরুরা (যারা সিস্টেমের অভ্যন্তরীণগুলি জানেন) কী বলে?
হালনাগাদ:
আমাকে এই প্রশ্নটি তীক্ষ্ণ করা যাক।
- আমি চাই না যে আমার উচিত কাজটি কাউকে করা উচিত। আমি আপনার সময় খুব শ্রদ্ধা। সুতরাং আমি পরে বিশ্লেষণের ব্যাখ্যাটিতে যাব।
- আমি যা খুঁজছিলাম তা হ'ল কিছু পয়েন্টার এবং টিপস এবং গাইডলাইন।
- আমি এই দুর্দান্ত সামান্য পোস্টটি পড়েছি: https://devcenter.heroku.com/articles/postgresql-indexes#manages- এবং- maintaining- সূচকগুলি সম্পর্কে সূচকগুলি
- আমি সাধারণত যা করি তা হ'ল 4 টি পৃথক সূচক তৈরি করা (জিও-বাক্স, দেশের নাম, ফাইল_প্রকার, এবং তারিখ) তবে একটি যৌগিক ক্যোয়ারী কী করবে তা দেখতে চাই।
এই অনুমানগুলির মধ্যে কোনওটি ভুল হলে আমাকে বলুন। (আমি যৌগিক সূচকগুলির ধারণাটিতে বেশ নতুন)
- অর্ডার গুরুত্বপূর্ণ। প্রথম সূচক হিসাবে বেছে নিন যা সারিগুলিকে সর্বাধিক কেটে ফেলবে (আমার ক্ষেত্রে অবস্থান (ভূগোল) যা একটি সাধারণ বহুভুজ বা বহু-বহুভুজ সবচেয়ে ভাল করবে)।
- কখনও কখনও প্রশ্নগুলি সূচকগুলি এড়িয়ে যায়। তবে যদি আমি কী (# 1, # 2, # 3, # 4) দিয়ে একটি যৌগিক ক্যোয়ারী তৈরি করি তবে ব্যবহারকারী যদি # 1, # 3 এর জন্য জিজ্ঞাসা করে এমন কিছু তৈরি করে তবে পরিকল্পনাকারী এখনও একক যৌগিক ক্যোয়ারী ব্যবহার করবে, যেহেতু তারা আদেশ করে রক্ষণাবেক্ষণ করা হয়.
- সাধারণত আমি তিনটি বিটিআরই কোয়েরি তৈরি করি এবং একটি জিআইএসটি (ভূগোলের ধরণের জন্য)। পোস্টজিআইএস একাধিক সূচক-প্রকারের মিশ্রণ তৈরি করে না। সুতরাং আমাকে যৌগিক সূচক জিআইএসটি ব্যবহার করতে হবে। তবে এতে জিনিসগুলিকে আঘাত করা উচিত নয়।
- আমি যদি কিছু অতিরিক্ত যৌগিক বা একক মান সূচক তৈরি করি তবে পরিকল্পনাকারী সবচেয়ে বুদ্ধিমান একটি বেছে নেওয়ার জন্য যথেষ্ট স্মার্ট .....
- দেশের নামের প্রায় 250 টি পৃথক মান থাকতে পারে এবং স্পষ্টতই অবস্থানের সাথে জড়িত (জিওবক্স) তবে সারি আকারটি কাটানোর জন্য পরবর্তী সেরা সূচক যদি ফাইল_প্রকার হয় তবে আমার এটি পরবর্তী ব্যবহার করা উচিত। আমি আশা করি না যে ব্যবহারকারীরা প্রায়শই তাদের জিজ্ঞাস্য সেটে দেশ বা তারিখ ব্যবহার করবেন।
- 4 কীগুলির একটি যৌগিক সূচক তৈরি করার বিষয়ে আমাকে চিন্তার দরকার নেই, তাত্পর্যপূর্ণ আকারের আকারের আকার বাড়িয়ে তুলবে। উদাহরণস্বরূপ, যদি একটি-কী সূচকটি পারফরম্যান্স বৃদ্ধির 90% হয়, তবে এটি আরও যৌগিক করে তুলতে আরও 3 টি আইটেম যুক্ত করতে ক্ষতি করবে না। বিপরীতে, আমার সত্যই উভয় সূচক তৈরি করা উচিত। একটি একক ভূগোল সূচক এবং একটি যৌগিক সূচক এবং পরিকল্পনাকারীকে কোনটি সেরা তা নির্ধারণ করুন এবং এটি সূচীকরণের সারণির আকার বিবেচনা করবে।
আবার, আমি কাউকেই আমার সমাধানটি ডিজাইন করতে বলছি না, আমি অন্যের কাজকে শঙ্কিত করি না। তবে আমার এমন স্টাফের দরকার আছে যা পোস্টগ্র্যাসকিউএল ডকুমেন্টেশন আমাকে বাস্তবায়ন সম্পর্কে বলে না
[আমার কাছে এখনও প্রদর্শন করার জন্য কোনও স্পষ্ট ফলাফল না পাওয়ার কারণটি হ'ল আমাকে 24M সারির সারণি থেকে এই 25 কে সারি টেবিলটি তৈরি করতে হবে। আমি যা ভেবেছিলাম তার চেয়ে বেশি সময় নিচ্ছে। আমি 1,000 টি আইটেম গ্রুপগুলিতে জিনিসগুলিকে ক্লাস্টার করছি এবং 25 কে সারি সারণির বিপরীতে ব্যবহারকারীকে জিজ্ঞাসা দিচ্ছি। তবে আমার পরের প্রশ্নটি মাস্টার 25 এম সারি টেবিলের কাছে গিয়ে জিনিসগুলি টেনে আনতে সেই প্রশ্নের ফলাফল ব্যবহার করে জড়িত থাকবে এবং সেখানেই যৌগিক সূচকটির কার্য সম্পাদন সত্যিই এইচআইটি করবে]।
নীচে নমুনা কোয়েরি:
SELECT
public.product_list_meta_mv.cntry_name AS country,
public.product_list_meta_mv.product_producer AS producer,
public.product_list_meta_mv.product_name AS prod_name,
public.product_list_meta_mv.product_type AS ptype,
public.product_list_meta_mv.product_size AS size,
ST_AsGeoJSON(public.product_list_meta_mv.the_geom, 10, 2) AS outline
FROM
public.product_list_meta_mv
WHERE
public.product_list_meta_mv.cntry_name = 'Poland'
AND
ST_Intersects(public.product_list_meta_mv.the_geom,
st_geogfromtext('SRID=4326;POLYGON((21.23107910156250 51.41601562500000,
18.64379882812500 51.41601562500000,
18.64379882812500 48.69415283203130,
21.23107910156250 48.69415283203130,
21.23107910156250 51.41601562500000))'))
AND (date >= '1/2/1900 5:00:00 AM'
AND date <= '2/26/2014 10:26:44 PM')
AND (public.product_list_meta_mv.product_type in
('CIB10','DTED0','DTED1','DTED2','CIB01','CIB05')) ;
বিশ্লেষণের ফলাফলগুলি ব্যাখ্যা করুন (আমি কোনও যৌগিক সূচকগুলিতে রাখিনি, এবং যে গতিটি আমি দেখছি তা থেকে আমার প্রয়োজন হবে কিনা তা আমি জানি না)।
"Bitmap Heap Scan on catalog_full cat (cost=4.33..37.49 rows=1 width=7428) (actual time=1.147..38.051 rows=35 loops=1)"
" Recheck Cond: ('0103000020E61000000100000005000000000000005838354000000000AEB0494000000000A0A7324000000000AEB0494000000000A0A73240000000006C5D48400000000058383540000000006C5D4840000000005838354000000000AEB04940'::geography && outline)"
" Filter: (((type)::text = ANY ('{CADRG,CIB10,DTED1,DTED2}'::text[])) AND (_st_distance('0103000020E61000000100000005000000000000005838354000000000AEB0494000000000A0A7324000000000AEB0494000000000A0A73240000000006C5D48400000000058383540000000006C5D4840000000005838354000000000AEB04940'::geography, outline, 0::double precision, false) < 1e-005::double precision))"
" Rows Removed by Filter: 61"
" -> Bitmap Index Scan on catalog_full_outline_idx (cost=0.00..4.33 rows=8 width=0) (actual time=0.401..0.401 rows=96 loops=1)"
" Index Cond: ('0103000020E61000000100000005000000000000005838354000000000AEB0494000000000A0A7324000000000AEB0494000000000A0A73240000000006C5D48400000000058383540000000006C5D4840000000005838354000000000AEB04940'::geography && outline)"
"Total runtime: 38.109 ms"
EXPLAIN ANALYZE SELECT pid,product_name,type,country,date,size,cocom,description,egpl_date,ST_AsGeoJSON(outline, 10, 2) AS outline
FROM portal.catalog_full AS cat
WHERE ST_Intersects(st_geogfromtext('SRID=4326;POLYGON((21.2200927734375 51.38031005859375, 18.65478515625 51.38031005859375, 18.65478515625 48.7298583984375, 21.2200927734375 48.7298583984375, 21.2200927734375 51.38031005859375))'), cat.outline)
AND (cat.type in ('CADRG','CIB10','DTED1','DTED2'))
EXPLAIN ANALYZE
ক্যোয়ারির জন্য দেখান ।