পোস্টগ্রিএসকিউএল: COUNT (*) অনুক্রমিক স্ক্যান ব্যবহার করে, সূচি নয়


12

COUNT(*)খুব ছোট এবং সূচকযুক্ত প্রাথমিক কী থাকা অবস্থায় কেন পোস্টগ্র্রেএসকিউএল ক্রমানুসারে অনুসন্ধানের জন্য টেবিলটি স্ক্যান করে ?

উত্তর:


16

সরকারী উইকি পেজ যে উত্তর দিতে:

[...] এটি ধীর হওয়ার কারণ পোস্টগ্র্রেএসকিউএল এর এমভিসিসি বাস্তবায়নের সাথে সম্পর্কিত। একাধিক লেনদেনের মাধ্যমে ডেটার বিভিন্ন রাজ্য দেখতে পাওয়া যায় তার অর্থ এই যে পুরো "টেবিল জুড়ে ডেটা সংক্ষিপ্ত করার জন্য" COUNT (*) "এর পক্ষে সরল কোনও উপায় নেই; পোস্টগ্রিএসকিউএল অবশ্যই সমস্ত সারি দিয়ে যেতে হবে, কিছুটা অর্থে। এটি সাধারণত টেবিলের প্রতিটি সারি সম্পর্কে ক্রমিক স্ক্যান পড়ার তথ্যগুলিতে ফলাফল দেয়। [...]

তদতিরিক্ত, আপনি ক্যোয়ার পরিকল্পনাকারীর জন্য তথ্য পুনর্নির্মাণের জন্য একটি বিশ্লেষণ চেষ্টা করতে পারেন ।

আপনার ব্যবহার করে আরও ভাল পারফরম্যান্স পাওয়া উচিত COUNT(an uniquly indexed field)তবে এটি যদি খুব বড় হয় তবে এটি করার একমাত্র উপায় একটি সিক স্ক্যান।

আপনার যদি খুব দ্রুত সংখ্যার প্রয়োজন হয় এবং স্কিমা অনুসন্ধানে ভয় না পান তবে আপনি নিম্নলিখিতটি করতে পারেন

SELECT reltuples FROM pg_class WHERE oid = 'your_table'::regclass

তবে এই মানগুলির উপর নির্ভর করবেন না কারণ এটি কেবলমাত্র একটি "আনুমানিক" (যদিও প্রায়শই সঠিক) সারণীতে টিপলগুলির সংখ্যা।


আমি এটি সঠিক মনে করি না। আমি কোথাও কিছু পড়িনি, যেখানে COUNT(pk)পারফরম্যান্স উন্নতি হবে। আমি মনে করি এটি সর্বদা একটি সিক-স্ক্যান করবে
vol7ron

1
যেখানে আপনি যে ধারাটি সঠিক তা ছাড়াই একটি সিক স্ক্যান সম্পাদন করা হবে। পর্যায়ে নির্বাচন করুন যেখানে ক্লজ পোস্টগ্র্যাস্কল কোনও সূচক ব্যবহার করতে পারে, তবে এটি মনে রাখবেন যে টিপলগুলি যেটি জানিয়েছে তার দৃশ্যমানতা যাচাই করতে টেবিলে ফিরে যাবে।
স্কট মার্লো

আরেকটি উপায় আনুমানিক সারি গণনা পেতে যে আমার মনে আছে হয় সহজে খুঁজে EXPLAIN SELECT * from your_table;। এটি কোয়েরি কার্যকর করবে না। আউটপুটটিতে rows=…সারিগুলির আনুমানিক সংখ্যা সহ অন্তর্ভুক্ত ।
সোভেন মারনাচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.