নির্বাচন গণনা (*) এবং নির্বাচন গণনা (যে কোনও_ন_নুল_কলোম) এর মধ্যে পার্থক্য কী?


58

আমি মনে করি মনে হয় (ওরাকল উপর) উচ্চারণ select count(*) from any_tableএবং এর মধ্যে একটি পার্থক্য আছে select count(any_non_null_column) from any_table

এই দুটি বিবৃতি মধ্যে পার্থক্য কি, যদি কোন?

উত্তর:


72
  • COUNT (*) NULLS অন্তর্ভুক্ত করবে
  • COUNT (কলাম_অর্থ_প্রকাশ) করবে না।

এর মানে হল এই COUNT(any_non_null_column)হিসাবে একই দেব COUNT(*)কারণ কোন শূন্য মান পার্থক্য সৃষ্টি হয় অবশ্যই।

সাধারণত, COUNT(*)আরও ভাল হওয়া উচিত কারণ যে কোনও সূচক ব্যবহার করা যেতে পারে কারণ সূচী COUNT(column_or_expression)বা SARGable নাও হতে পারে

থেকে ANSI-92 ( "জন্য চেহারা Scalar expressions 125")

কেস:

ক) যদি COUNT (*) নির্দিষ্ট করা থাকে তবে ফলাফলটি টি এর কার্ডিনালিটি is

খ) অন্যথায়, টিএক্সকে একক-কলামের সারণী হতে দিন যা টির প্রতিটি সারিতে <মান প্রকাশ> প্রয়োগ এবং নাল মানগুলি মুছে ফেলার ফলাফল। যদি এক বা একাধিক নাল মানগুলি মুছে ফেলা হয়, তবে একটি সমাপ্তির শর্ত উত্থাপিত হয়: সতর্কতা-নাল মান সেট ফাংশনে মুছে ফেলা হয়।

একই বিধিগুলি কমপক্ষে এসকিউএল সার্ভার এবং সিবাসে প্রযোজ্য

দ্রষ্টব্য: COUNT (1) হ'ল COUNT (*) এর সমান কারণ 1 হ'ল একটি নন-অযোগ্য এক্সপ্রেশন।


4
কেবলমাত্র সম্পূর্ণতার জন্য: ওরাকল যদি ব্যবহৃত হয় তবে কোনও সূচকযুক্ত নল-কলামে সূচি-স্ক্যান count(*)ব্যবহার করবে।
a_horse_with_no_name

আমি ভেবেছিলাম তিন সম্ভব অপশন ছিল COUNT(*), COUNT(<constant>)এবং COUNT(<column name>)এবং যে সব তিনটি প্রিফিক্স যেতে পারে ALLবা DISTINCT(নির্ধারিত লিঙ্ক ALLবাদ দেওয়া হলে)। আমি কেবল ভাবছি আপনি যেখানে বলছেন সেখানে কোন অভিব্যক্তিটি ব্যবহার করা যেতে পারে _or_expression?
onedaywhen

2
COUNT(1)অকেজো উদাহরণ হিসাবে @neday যখন, এটি একই রকম COUNT(*)COUNT(CASE WHEN a>b THEN 1 END)উদাহরণ হিসাবে যে সারি গণনা যেখানে a> খ।
ypercubeᵀᴹ

16

ওরাকলের যে কোনও সাম্প্রতিক (অর্থাত্ 8.x + ) সংস্করণে তারা একই কাজ করে । অন্য কথায় পার্থক্যটি কেবল শব্দার্থক:

select count(*) from any_table

আপনি যা করার চেষ্টা করছেন তা সহজেই পঠনযোগ্য এবং স্পষ্ট is

select count(any_non_null_column) from any_table

কারণ পড়া কঠিন

  1. এটা দীর্ঘ
  2. এটি কম স্বীকৃত
  3. আপনি any_non_null_columnসত্যিই হিসাবে প্রয়োগ করা হয়েছে কিনা তা নিয়ে ভাবতে হবেnot null

সংক্ষেপে, ব্যবহারcount(*)


9

একটি সাম্প্রতিক সংস্করণ আছে প্রকৃতপক্ষে COUNT (*) এবং COUNT (মধ্যে কোন পার্থক্য নেই কোনো না নাল কলাম ), জোর দিয়ে নাল না :-) প্রসঙ্গক্রমে একটি ব্লগ পোস্টের সাথে যে বিষয় ঢেকে: COUNT (কর্নেল) গণনা চেয়েও বড় (*)?


1

বইয়ে Oracle8i সার্টিফাইড পেশাগত DBA সার্টিফিকেশন পরীক্ষার গাইড (ISBN-0072130601) , পৃষ্ঠা 78 COUNT টি (1) দ্রুত যে আসলে চালানো হবে বলে COUNT টি (*) কারণ নির্দিষ্ট প্রক্রিয়া প্রতিটি কলামের এর nullability জন্য তথ্য অভিধান চেক করার জন্য খেলার মধ্যে বলা হয় (অথবা অন্তত অ nullability প্রথম কলাম) যখন ব্যবহার COUNT টি (*) । COUNT (1) এই প্রক্রিয়াগুলিকে বাইপাস করে।

মাইএসকিউএল টিবিএলনামে 'নির্বাচন COUNT (1) এর জন্য প্রতারণা করে;' সারণী গণনার জন্য সারণী শিরোনাম পড়ে মাইআইএসএএম টেবিলগুলিতে। ইনোডিবি প্রতিবার গণনা করে।

অ্যানোস্টিক উপায়ে COUNT (*) COUNT (*) এর চেয়ে দ্রুত চলবে কিনা তা পরীক্ষা করতে কেবল নিম্নলিখিতটি চালান এবং চলমান সময়টি নিজের জন্য বিচার করুন:

SELECT COUNT(1) FROM tblname WHERE 1 = 1;
SELECT COUNT(*) FROM tblname WHERE 1 = 1;
SELECT COUNT(column-name) FROM tblname WHERE 1 = 1;

স্টোরেজ ইঞ্জিন বা আরডিবিএমএস নির্বিশেষে এটি COUNT ফাংশনটিকে একই স্তরের প্লেয়িং ফিল্ডে পরিচালিত করে।


8
পরীক্ষার গাইড ভুল is ওরাকল কাউন্টে (*) = গণনা (1) (কমপক্ষে 7 সংস্করণের পরে)। Asktom.oracle.com/pls/asktom/… দেখুন (ইতিমধ্যে @ জ্যাকপিডুগলাস দ্বারা রেফারেন্স করা হয়েছে)
লেইফ রিফেল

3
মজাদার. এএনএসআই অনুমান অনুসারে COUNT (*) কলামগুলি মোটেও চেক করা উচিত নয়। SQL সার্ভার জন্য তাই জিজ্ঞেস করা হল কিছু সময় আগে খুব stackoverflow.com/questions/1221559/count-vs-count1/...
gbn

@ জিবিএন, @ লিগ রিফেল, @ বারেন্ড_ কে আমাকে চিমিং করা এবং আরও পড়তে এবং শিখতে স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ, বিশেষত যেহেতু আমি কিছুক্ষণ ধরে ওরাকলের সাথে কাজ করিনি।
রোল্যান্ডোমাইএসকিউএলডিবিএ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.