পোস্টগ্রিজ: গণনা (*) বনাম গণনা (আইডি)


11

আমি দেখেছি ডকুমেন্টেশন মধ্যে পার্থক্য count(*)এবং count(pk)। আমি ব্যবহার করছিলাম count(pk)(কোথায় pkএকটি SERIAL PRIMARY KEY) অস্তিত্ব সম্পর্কে না জেনে count(*)

আমার প্রশ্ন পোস্টগ্রিসের অভ্যন্তরীণ অপ্টিমাইজেশন সম্পর্কে। এটি SERIAL PRIMARY KEYপ্রতিটি কিছুর মধ্যে উপস্থিত রয়েছে এবং এটি কখনও মিথ্যা হবে না এবং কেবল সারিগুলি গণনা করবে বা এটি প্রতিটি সারির জন্য অপ্রয়োজনীয় প্রাকটিক চেক করবে কি এটি যথেষ্ট স্মার্ট ? আমি সম্মত হই যে এটি সম্ভবত অর্থহীন অপ্টিমাইজেশনের খুব বেশি তবে আমি কেবল কৌতূহলী।

আমি আউটপুট নিয়ে গবেষণা শুরু করেন EXPLAINএবং EXPLAIN VERBOSEএর জন্য count(*), count(id)এবং count(id > 50)কিনা তা দেখতে EXPLAINতার আউটপুটে predicates পরীক্ষণ উল্লেখ করেছে। এটা হয় না।

উত্তর:


15

আমি গত কয়েক বছর ধরে বিভিন্ন সংস্করণের সাথে আমার বার বার পরীক্ষায় সামঞ্জস্যপূর্ণ রেজাল্ট পেলাম
count(*)হয় সামান্য যতো তাড়াতাড়ি count(pk)। এটি আরও খাটো এবং বেশিরভাগ সময় যা পরীক্ষা করা হয় তা আরও ভাল ফিট করে: একটি সারিটির অস্তিত্ব।

সম্বন্ধে

পোস্টগ্র্রেস কি এটিকে বাছাই করার জন্য যথেষ্ট স্মার্ট যে SERIAL PRIMARY KEYপ্রতি সারিতে একটি বিদ্যমান থাকবে এবং কখনই মিথ্যা হবে না

একমাত্র প্রাসঙ্গিক বিষয় NOT NULLসীমাবদ্ধতা। PRIMARY KEYহয় NOT NULLস্বয়ংক্রিয়ভাবে serialঅথবা never falseপ্রশ্নের লম্ব হয়।

এর সাথে count(col), যদি পোস্টগ্রেএসকিউএল স্মার্ট হওয়ার চেষ্টা করে এবং সিস্টেম ক্যাটালগটি পরীক্ষা করে দেখছিল যে কোনও কলামটি ছিল NOT NULLএবং কোনও সমমানের দিকে ফিরে যায় count(*), তবে আপনার কাছে এখনও সিস্টেমের টেবিলে আরও একটি চেহারা রয়েছে count(*)

হিসাবে EXPLAINআউটপুট, সেখানে হয় একটি ইঙ্গিত:

EXPLAIN SELECT count(*) FROM ...

Aggregate  (cost=4963.38..4963.43 rows=1 width=0) ...


EXPLAIN SELECT count(pk) FROM ...

Aggregate  (cost=4963.38..4963.43 rows=1 width=4) ...

অর্থ, এটি সংজ্ঞায়িত হলেও রূপান্তরিত count(col)হয় নাcount(*)NOT NULL


এটি কি এখনও নতুন সংস্করণগুলির ক্ষেত্রে? আমি মনে করি এটি প্রতিটি প্রশ্নের জন্য সত্যই প্রয়োজন হবে না - এটি ক্যাশে করা যেতে পারে।
ওন্দ্র Žižka

1
বিটিডব্লিউ, একটি NOT NULLকলাম সহ, যদি আপনার অনেক সারি থাকে তবে পার্থক্যটি বড় । লক্ষ লক্ষ সারি সহ আমাদের ক্ষেত্রে COUNT(*)3 গুণ দ্রুত হয়। (পোস্টগ্রেস 9.4)
ওন্দ্র Žižka
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.