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


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.