আমার সেরা পদ্ধতির বিষয়ে একটি প্রশ্ন আছে। যখন ডেটা আকারে পরিবর্তনশীল হিসাবে বিবেচনা করা হয় তখন কোন পদ্ধতিটি সেরা তা আমি নিশ্চিত নই।
নিম্নলিখিত 3 টেবিল বিবেচনা করুন:
কর্মচারী
EMPLOYEE_ID, EMP_NAME
প্রকল্প
PROJECT_ID, PROJ_NAME
EMP_PROJ (উপরের দুটি টেবিলের অনেকের কাছে)
EMPLOYEE_ID, PROJECT_ID
সমস্যা : একজন কর্মচারী দেওয়া, সমস্ত প্রকল্পের সমস্ত কর্মচারীর সন্ধান করুন যা এই কর্মচারীর সাথে জড়িত।
আমি এটি দুটি উপায়ে চেষ্টা করেছি .. উভয় পন্থা মাত্র কয়েক মিলি সেকেন্ডের দ্বারা পৃথক হয় যা আকারের ডেটা ব্যবহার করা যায় না।
SELECT EMP_NAME FROM EMPLOYEE
WHERE EMPLOYEE_ID IN (
SELECT EMPLOYEE_ID FROM EMP_PROJ
WHERE PROJECT_ID IN (
SELECT PROJECT_ID FROM EMP_PROJ p, EMPLOYEE e
WHERE p.EMPLOYEE_ID = E.EMPLOYEE_ID
AND E.EMPLOYEE_ID = 123)
যাওয়া
select c.EMP_NAME FROM
(SELECT PROJECT_ID FROM EMP_PROJ
WHERE EMPLOYEE_ID = 123) a
JOIN
EMP_PROJ b
ON a.PROJECT_ID = b.PROJECT_ID
JOIN
EMPLOYEE c
ON b.EMPLOYEE_ID = c.EMPLOYEE_ID
এখন অবধি, আমি প্রত্যেকে প্রায় 5000 কর্মচারী এবং প্রকল্প প্রত্যাশা করছি .. তবে বহু সম্পর্ক কতটা বিদ্যমান তা সম্পর্কে কোনও ধারণা নেই। আপনি কোন পদ্ধতির সুপারিশ করবেন? ধন্যবাদ!
সম্পাদনা: এক্সিকিউশন পরিকল্পনা কার্যকর করার পরিকল্পনা 1
"Hash Join (cost=86.55..106.11 rows=200 width=98)"
" Hash Cond: (employee.employee_id = emp_proj.employee_id)"
" -> Seq Scan on employee (cost=0.00..16.10 rows=610 width=102)"
" -> Hash (cost=85.07..85.07 rows=118 width=4)"
" -> HashAggregate (cost=83.89..85.07 rows=118 width=4)"
" -> Hash Semi Join (cost=45.27..83.60 rows=118 width=4)"
" Hash Cond: (emp_proj.project_id = p.project_id)"
" -> Seq Scan on emp_proj (cost=0.00..31.40 rows=2140 width=8)"
" -> Hash (cost=45.13..45.13 rows=11 width=4)"
" -> Nested Loop (cost=0.00..45.13 rows=11 width=4)"
" -> Index Scan using employee_pkey on employee e (cost=0.00..8.27 rows=1 width=4)"
" Index Cond: (employee_id = 123)"
" -> Seq Scan on emp_proj p (cost=0.00..36.75 rows=11 width=8)"
" Filter: (p.employee_id = 123)"
পদ্ধতির কার্যকরকরণ পরিকল্পনা 2:
"Nested Loop (cost=60.61..112.29 rows=118 width=98)"
" -> Index Scan using employee_pkey on employee e (cost=0.00..8.27 rows=1 width=4)"
" Index Cond: (employee_id = 123)"
" -> Hash Join (cost=60.61..102.84 rows=118 width=102)"
" Hash Cond: (b.employee_id = c.employee_id)"
" -> Hash Join (cost=36.89..77.49 rows=118 width=8)"
" Hash Cond: (b.project_id = p.project_id)"
" -> Seq Scan on emp_proj b (cost=0.00..31.40 rows=2140 width=8)"
" -> Hash (cost=36.75..36.75 rows=11 width=8)"
" -> Seq Scan on emp_proj p (cost=0.00..36.75 rows=11 width=8)"
" Filter: (employee_id = 123)"
" -> Hash (cost=16.10..16.10 rows=610 width=102)"
" -> Seq Scan on employee c (cost=0.00..16.10 rows=610 width=102)"
দেখে মনে হচ্ছে অ্যাপ্রোচ 2 এর এক্সিকিউশন প্ল্যানটি কিছুটা ভাল, কারণ 'ব্যয়' 85 টি পদ্ধতির 85 এর বিপরীতে 60 হয় 1. এটি কি এটি বিশ্লেষণ করার সঠিক উপায়?
কীভাবে কেউ জানতে পারে যে এটি বহু ধরণের বহু সংমিশ্রণের ক্ষেত্রেও সত্য হয়ে উঠবে?
explain analyze
পরিকল্পনার মধ্যে আরও পার্থক্য প্রকাশ করতে পারে