যখন আমরা select count(*) from table_name
এটি কার্যকর করি তখন সারিগুলির সংখ্যা প্রদান করে।
কি করে count(1)
? 1
এখানে কি বোঝায়? এটি কি একই count(*)
(যেমন মৃত্যুদণ্ড কার্যকর করার ক্ষেত্রে একই ফলাফল দেয়)?
যখন আমরা select count(*) from table_name
এটি কার্যকর করি তখন সারিগুলির সংখ্যা প্রদান করে।
কি করে count(1)
? 1
এখানে কি বোঝায়? এটি কি একই count(*)
(যেমন মৃত্যুদণ্ড কার্যকর করার ক্ষেত্রে একই ফলাফল দেয়)?
উত্তর:
COUNT ফাংশনের প্যারামিটারটি এমন একটি অভিব্যক্তি যা প্রতিটি সারির জন্য মূল্যায়ন করতে হয়। COUNT ফাংশনটি সারিগুলির সংখ্যা প্রদান করে যার জন্য অভিব্যক্তি একটি নন-মানকে মূল্যায়ণ করে। (* একটি বিশেষ অভিব্যক্তি যা মূল্যায়ন করা হয় না, এটি কেবল সারিগুলির সংখ্যা দেয়))
এক্সপ্রেশনটির জন্য আরও দুটি অতিরিক্ত সংশোধক রয়েছে: সমস্ত এবং DISTINCT। এটি নির্ধারণ করে যে সদৃশগুলি বাতিল করা হয়। যেহেতু সমস্তই ডিফল্ট, তাই আপনার উদাহরণ গণনা (ALL 1) এর সমান, যার অর্থ হ'ল সদৃশগুলি বজায় রাখা আছে।
যেহেতু "1" এক্সপ্রেশনটি প্রতিটি সারির জন্য নন-নালকে মূল্যায়ন করে এবং যেহেতু আপনি সদৃশগুলি অপসারণ করছেন না, তাই COUNT (1) সর্বদা একই সংখ্যাকে COUNT (*) হিসাবে ফেরত দেওয়া উচিত।
এখানে একটি লিঙ্ক যা আপনার প্রশ্নের উত্তর দিতে সহায়তা করবে। সংক্ষেপে:
গণনা (*) হ'ল এটি লেখার সঠিক উপায় এবং গণনা (1) অভ্যন্তরীণভাবে (*) গণনা করা অপ্টিমাইজড - যেহেতু
ক) যে সারিগুলি 1 টি নাল নয় তার তুলনায় কম দক্ষ
খ) সারিগুলি গণনা করুন
ওরাকলে গণনা (*) এবং গণনা (1) এর মধ্যে পার্থক্য?
গণনা (*) এর অর্থ এটি সমস্ত রেকর্ড অর্থাৎ প্রতিটি সেল বিটকে গণনা করবে
গণনা (1) এর অর্থ এটি মান 1 সহ একটি সিউডো কলাম যুক্ত করবে এবং সমস্ত রেকর্ডের গণনা প্রদান করবে
এটির মধ্যে পার্থক্যের অনুরূপ
SELECT * FROM table_name and SELECT 1 FROM table_name.
যদি তুমি করো
SELECT 1 FROM table_name
এটি আপনাকে সারণীতে প্রতিটি সারির জন্য নম্বর দেবে। সুতরাং হ্যাঁ count(*)
এবং count(1)
ইচ্ছার হিসাবে count(8)
বা একই ফলাফল প্রদান করবেcount(column_name)
এখানে কোন পার্থক্য নেই.
COUNT(1)
মূলত প্রতিটি সারির জন্য একটি ধ্রুবক মান 1 কলাম গণনা করা হয়। এখানকার অন্যান্য ব্যবহারকারীরা যেমন বলেছেন, এটি COUNT(0)
বা তেমনই সমান COUNT(42)
। যে কোনও অমূল্যই NULL
যথেষ্ট।
ওরাকল অপটিমাইজার স্পষ্টতই এতে বাগগুলি ব্যবহার করেছিল, যার ফলে আপনি কোন কলামটি বেছে নিয়েছেন এবং এটি কোনও সূচীতে ছিল কিনা তা গণনাটিকে প্রভাবিত করেছিল, সুতরাং COUNT (1) সম্মেলনটি কার্যকর হয়েছিল came
SELECT COUNT(1) from <table name>
ঠিক একই জিনিস করা উচিত
SELECT COUNT(*) from <table name>
এটি SELECT COUNT(*)
কিছু ডাটাবেসের চেয়ে আরও ভাল পারফর্ম করার জন্য কিছু কারণ থাকতে পারে বা এখনও থাকতে পারে , তবে আমি বিবেচনা করব যে ডিবিতে কোনও বাগ।
SELECT COUNT(col_name) from <table name>
তবে এর আলাদা অর্থ রয়েছে, কারণ এটি প্রদত্ত কলামটির জন্য একটি নন-নাল মান সহ কেবল সারিগুলিকে গণনা করে।
ওরাকলে আমি বিশ্বাস করি এগুলির ঠিক একই অর্থ রয়েছে
আপনি এটির মতো পরীক্ষা করতে পারেন:
create table test1(
id number,
name varchar2(20)
);
insert into test1 values (1,'abc');
insert into test1 values (1,'abc');
select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;
আপনি কাকে জিজ্ঞাসা করছেন তার উপর নির্ভর করে কিছু লোক রিপোর্ট করে যে মৃত্যুদন্ড কার্যকর করা তার select count(1) from random_table;
চেয়ে দ্রুত চলে select count(*) from random_table
। অন্যরা দাবি করেন যে তারা ঠিক একই রকম।
এই লিঙ্কটি দাবি করেছে যে 2 এর মধ্যে গতির পার্থক্য একটি সম্পূর্ণ টেবল স্ক্যান বনাম দ্রুতগতি সম্পূর্ণ স্ক্যানের কারণে।