ধারা অনুসারে একটি গোষ্ঠীতে কলামগুলির ক্রম কী গুরুত্বপূর্ণ?


85

আমার যদি দুটি কলাম রয়েছে, একটি অত্যন্ত উচ্চ কার্ডিনালিটি সহ একটি এবং খুব কম কার্ডিনালিটির (মানগুলির অনন্য #), আমি কোন ক্রম অনুসারে গ্রুপ করব তা কী বিবেচনা করে?

এখানে একটি উদাহরণ:

select 
     dimensionName, 
     dimensionCategory, 
     sum(someFact)
from SomeFact f
join SomeDim d on f.dimensionKey = d.dimensionKey
group by 
    d.dimensionName,  -- large number of unique values
    d.dimensionCategory -- small number of unique values

এটা গুরুত্বপূর্ণ যেখানে পরিস্থিতি আছে?


উত্তর:


74

না, শৃঙ্খলা দ্বারা গ্রুপের জন্য আদেশটি কোনও ব্যাপার নয়।

মাইএসকিউএল এবং এসকিউএলাইট হ'ল একমাত্র ডাটাবেস যা আমি সচেতন সেগুলি আপনাকে সেই কলামগুলি নির্বাচন করতে দেয় যা গোষ্ঠী থেকে বাদ পড়েছে (অ-মানক, বহনযোগ্য নয়) তবে অর্ডারটি সেখানে কোনও গুরুত্ব দেয় না।


27

এসকিউএল ঘোষণামূলক।

এই ক্ষেত্রে, আপনি কীভাবে ডেটা গোষ্ঠীভুক্ত করতে চান তা অপটিমাইজারকে বলেছিলেন এবং এটি কীভাবে এটি করা যায় তা কার্যকর হয়।

এটি লাইন বাই লাইন মূল্যায়ন করবে না (পদ্ধতিগত) এবং প্রথমে একটি কলামে তাকাবে

মূল স্থান কলামের আদেশের বিষয়গুলি সূচকগুলির জন্য। col1, col2যেমন হয় না col2, col1। মোটেই


15
এটি অর্ডার দ্বারাও গুরুত্বপূর্ণ।
ভিনসেন্ট ম্যাকনাব

12

মাইক্রোসফ্ট এসকিউএল সার্ভারের একটি উত্তরাধিকারসূত্র রয়েছে, যার নাম রয়েছে রোলআপ called রোলআপ হ'ল গ্রুপ বাই সিনট্যাক্সের একটি এক্সটেনশন এবং যখন এটি গ্রুপ বাই কলামগুলির ক্রম ব্যবহার করা হয় তখন ফলাফলটি নির্ধারণ করে যে কোন কলামগুলি শ্রেণীবদ্ধ করা উচিত। ROLLUP তবে হ্রাস করা হয়। স্ট্যান্ডার্ড এসকিউএল বিকল্প হ'ল গ্রুপিং সেটগুলি ব্যবহার করা যা এসকিউএল সার্ভার ২০০৮ এবং পরবর্তী সংস্করণগুলি দ্বারা সমর্থিত।


10

যেহেতু এখানে এখানে উল্লেখ করা হয়নি। উত্তর উপরে সঠিক অর্থাত দফা "দ্বারা গ্রুপ" পরে কলাম ক্রম প্রভাবিত করবে না হয় শুদ্ধি ক্যোয়ারী (অর্থাত সমষ্টি পরিমাণ) দিয়ে।

তবে, "গ্রুপ বাই" বিভাগের পরে নির্দিষ্ট করা কলামগুলির ক্রমের ভিত্তিতে সারিগুলি পুনরুদ্ধার করার ক্রমটি পরিবর্তিত হবে। উদাহরণস্বরূপ Aনিম্নলিখিত সারিগুলির সাথে সারণী বিবেচনা করুন :

Col1 Col2 Col3
1   xyz 100
2   abc 200
3   xyz 300
3   xyz 400

SELECT *, SUM(Col3) FROM A GROUP BY Col2, Col1Col2আরোহী ক্রম অনুসারে আদেশ করা সারিগুলি পুনরুদ্ধার করবে ।

Col1 Col2 Col3 sum(Col3)
2   abc 200 200
1   xyz 100 100
3   xyz 300 700

এখন দলবদ্ধভাবে কলামের ক্রম পরিবর্তন করুন Col1, Col2। পুনরুদ্ধার করা সারিগুলি asc দ্বারা অর্ডার করা হয় Col1

অর্থাত্ select *, sum(Col3) from A group by Col1, Col2

Col1 Col2 Col3 sum(Col3)
1   xyz 100 100
2   abc 200 200
3   xyz 300 700

দ্রষ্টব্য: যোগফলের পরিমাণ (অর্থাত্ ক্যোয়ারীর যথার্থতা) হুবহু একই।


7
তবে, যদি না কোনও "অর্ডার বাই" ব্যবহার না করা হয়, তবে নির্বাচনের ফলাফলগুলির সারি ক্রমটি যাইহোক নির্ধারিত হয়, তাই না? সুতরাং আপনার কখনই সারিগুলির কোনও নির্দিষ্ট ক্রমের উপর নির্ভর করা উচিত নয়, এমনকি গ্রুপের মাধ্যমে মোটেও ব্যবহার না করা।
avl_swen

@ ওভাল_সৌদিনের সাথে একমত, আমি মনে করি প্রতিক্রিয়াটি খুব কমপক্ষে ইঙ্গিত করে যে এই আচরণ বাস্তবায়ন-নির্দিষ্ট। কোনও গ্যারান্টি নেই যে এসকিউএল সার্ভারের একটি নতুন (বা এমনকি একই) সংস্করণটি পৃথক ক্রম উত্পাদন করবে না।
নোবডিস নাইটমেয়ার

2

আমার যদি দুটি কলাম রয়েছে, একটি অত্যন্ত উচ্চ কার্ডিনালিটি সহ একটি এবং খুব কম কার্ডিনালিটির (মানগুলির অনন্য #), আমি কোন ক্রম অনুসারে গ্রুপ করব তা কী বিবেচনা করে?

প্রশ্ন -১

SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt  FROM tbl_product_spec 
GROUP BY spec_id, catid, spec_display_value ;

প্রশ্ন -২

SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt  FROM tbl_product_spec FORCE INDEX(idx_comp_spec_cnt)
GROUP BY catid, spec_id,spec_display_value;

উভয়ই সমান, আদেশ দলে দলে গ্রুপে কাজ করে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.