এসএসএমএস কেন একটি টেবিলের শীর্ষে নতুন সারি সন্নিবেশ করছে?


14

যখনই আমি ম্যানুয়ালি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ২০০৮-এর একটি টেবিলের মধ্যে একটি সারি প্রবেশ করান (ডাটাবেসটি এসকিউএল সার্ভার ২০০৫) আমার নতুন সারিটি নীচের চেয়ে তালিকার শীর্ষে উপস্থিত হয়। আমি পরিচয় কলামগুলি ব্যবহার করছি এবং এর মতো ফলাফলগুলিতে এটি ফলাফল

id  row
42 first row
1 second row
2 third row

যখন সারিগুলি আনা হয় এবং স্পষ্টভাবে অর্ডার করা হয় না। ওয়েব অ্যাপ্লিকেশনের জন্য সারিগুলি আনার সময় এবং কোনও TOP 1ক্যোয়ারী কী পরিবর্তন করে তা পরিবর্তিত করার ফলে এটি ভিন্ন চেহারাতে আসে।

আমি জানি order byতাদের আমি পারব , তবে কেন এমন হচ্ছে? আমার বেশিরভাগ ডেটা একটি ওয়েব অ্যাপ্লিকেশনের মাধ্যমে সন্নিবেশ করা হয়, এই অ্যাপ্লিকেশন থেকে সমস্ত সন্নিবেশ ফল্ট ইন ফার্স্ট আউট ক্রমের ফলস্বরূপ, যেমন সর্বশেষতম সন্নিবেশ নীচে থাকে, তাই আইডিগুলি সমস্ত এক সারিতে থাকে। সার্ভারে বা ম্যানেজমেন্ট স্টুডিওতে এমন কিছু সেটিংস রয়েছে যা এই অনুচিত আদেশের কারণ?


যেমনটি আমি মাঝে মাঝে দেখেছি, এটি যদি আপনি একটি একক টেবিল নির্বাচন করেন তবে পিকে কীভাবে সারিগুলি প্রদর্শিত হবে তা অর্ডার করার উপর নির্ভর করে। আপনি যদি কিছু যোগ দেয় তবে এটি অন্য টেবিলগুলি পিকে, এফকে এবং সূচকগুলির উপর নির্ভর করে পরিবর্তিত হতে পারে ...
গিলারমো গুটিরিজ

আনন্দময়-গো-রাউন্ড স্ক্যানগুলি সম্পর্কেও সচেতন হন ।
মাইকেল গ্রিন

উত্তর:


21

এসকিউএল ওয়ার্ল্ডে অর্ডার কোনও উপাত্তের সেটের অন্তর্নিহিত সম্পত্তি নয়। সুতরাং, আপনি আপনার আরডিবিএমএসের কাছ থেকে কোনও গ্যারান্টি পাবেন না যে আপনার ডেটা একটি নির্দিষ্ট ক্রমে - আবার এমনকি একটি সামঞ্জস্যপূর্ণ ক্রমেও ফিরে আসবে - যদি না আপনি কোনও ORDER BYক্লজ দিয়ে আপনার ডেটা জিজ্ঞাসা করেন ।

ক্রেগ ফ্রিডম্যান থেকে :

অর্ডার বাই শীর্ষের সাথে সংযুক্ত করা ফিরে আসা সারিগুলির সেটটিতে নির্ধারণবাদ যুক্ত করে। অর্ডার বাই না করে, ফিরে আসা সারির সেটটি ক্যোয়ারী পরিকল্পনার উপর নির্ভর করে এবং এমনকি মৃত্যুদন্ড কার্যকর হতে কার্যকর হতে পারে।

ORDER BYআপনি যদি আপনার ফলাফলের সেটে একটি সু-সংজ্ঞায়িত এবং ধারাবাহিক অর্ডার আশা করেন সর্বদা ব্যবহার করুন । আপনার প্রশ্নাবলিতে ডেটা নির্দিষ্ট অর্ডিংয়ের গ্যারান্টি রাখতে আপনার ডাটাবেস কীভাবে ডিস্কে সারিগুলি সংরক্ষণ করতে পারে (যেমন ক্লাস্টারড ইনডেক্সের মাধ্যমে)।


13

কেবলমাত্র অন্যান্য উত্তরগুলি বাড়ানোর জন্য: সংজ্ঞা অনুসারে একটি সারণী হ'ল সারিগুলির একটি নিরবচ্ছিন্ন সেট। আপনি যদি কোনও ORDER BYধারা উল্লেখ না করেন তবে এসকিউএল সার্ভার সর্বাধিক দক্ষ হিসাবে বিবেচনা করুন না কেন সারিগুলি ফিরিয়ে দিতে মুক্ত। এটি প্রায়শই কেবল সন্নিবেশের ক্রমের সাথে মিলিত হয়, কারণ বেশিরভাগ টেবিলগুলির পরিচয়, তারিখের সময় বা অন্যান্য একঘেয়েমি বৃদ্ধিকারী কলামগুলির উপর একটি ক্লাস্টারড সূচক থাকে তবে আপনার এটি ঠিক এরূপ হিসাবে দেখা উচিত: একটি কাকতালীয় ঘটনা। এটি নতুন ডেটা, একটি পরিসংখ্যান আপডেট, কোনও ট্রেস পতাকা, ম্যাক্সডপ, ক্যোয়ারের ইঙ্গিত, পরিবর্তন যোগদানের ক্ষেত্রে পরিবর্তন বা কোয়ারিতে থাকা ক্লজগুলি, কোনও সার্ভিস প্যাক / ক্রমবর্ধমান আপডেট / হটফিক্স / আপগ্রেডের কারণে অপ্টিমাইজারে পরিবর্তন, ডাটাবেসটিকে অন্য কোনও সার্ভারে স্থানান্তর করা, ইত্যাদি etc.

অন্য কথায়, এবং আমি জানি আপনি ইতিমধ্যে উত্তরটি জানেন তবে এটি যথেষ্টভাবে বলা যায় না:

আপনি যদি কোনও প্রশ্নের ক্রমের উপর নির্ভর করতে চান তবে সর্বদা যুক্ত করুন ORDER BY


আমি অর্ডের উপর নির্ভর করে পরিকল্পনা করছিলাম না, তবে দৃশ্যত এটি কিছুটা বিরক্তিকর যে আমার শেষ sertedোকানো আইটেমগুলি হঠাৎ শীর্ষে রয়েছে।
বেন ব্রোকা

আমি মনে করি এটি কারণ আপনি ওপেন সারণী ব্যবহার করছেন। ম্যানেজমেন্ট স্টুডিও ২০০৮-এ এই কমান্ডটি "শীর্ষস্থানীয় এন সারিগুলি সম্পাদনা করুন" এবং "শীর্ষস্থানীয় এন সারিগুলি নির্বাচন করুন" - এ পরিবর্তিত করা হয়েছে - আপনি যখন উত্তরটি চয়ন করেন, আপনি ফলস্বরূপ ক্যোয়ারী সম্পাদনা করতে মুক্ত হন, উদাহরণস্বরূপ শীর্ষটি সরাতে এবং একটি আদেশ যুক্ত করে add
অ্যারন বারট্রান্ড

এটি ম্যানেজমেন্ট স্টুডিও ২০০৮, সার্ভারটি 2005, আরও পরিষ্কার হওয়া উচিত ছিল। আমি একটি "খোলা টেবিল" কমান্ড ছিল জানেন না আমি সবসময় ব্যবহার করেছি selectstatments
বেন Brocka

4
ঠিক আছে, ভাল পয়েন্ট এখনও দাঁড়িয়ে আছে, আমি বুঝতে পারি যে এটি বিরক্তিকর যে ডেটাটি আপনি প্রত্যাশিত ক্রম হিসাবে ফিরে আসেন, তবে আমি আশা করি এটি এখন স্পষ্ট হয়ে গেছে যে এসকিউএল সার্ভার আপনার আদেশের আশা না করে যতক্ষণ না আপনি কী আদেশ প্রত্যাশা করেন না কেন ধারা দ্বারা একটি আদেশ যুক্ত করে। :-)
অ্যারন বার্ট্র্যান্ড

1

এটি কারণ টেবিলটি হিপ টেবিল (সম্ভবত সম্ভবত) হয় এবং সূচিযুক্ত হয় না। PRIMARY KEYপাশাপাশি আইডি কলামটি তৈরি করুন IDENTITY। এসকিউএল সার্ভার সূচকের ভিত্তিতে ডেটা শারীরিকভাবে সঞ্চয় করে - উদাহরণস্বরূপ, আইডি যদি একটি ক্লাস্টারড ইনডেক্স থাকে (যেমন একটি প্রাথমিক কী) ডেটা শারীরিকভাবে আইডির ক্রমে সংরক্ষণ করা হত এবং এমনভাবেও কোনও প্রশ্নের মধ্যে ফেরত দেওয়া হত একটি ORDER BYধারা। অন্যথায়, সারিগুলির ক্রমটি ডাটাবেসের ক্ষেত্রে মোটেই গুরুত্বপূর্ণ নয়। ফলস্বরূপ, ডাটাবেসে সারিগুলির ক্রমের উপর নির্ভর করে একটি অ্যাপ্লিকেশন থাকা (পাশাপাশি কলামগুলি একটি নির্দিষ্ট ক্রমে থাকা উপর নির্ভর করে) একটি ভাল অনুশীলন নয়। সারিগুলি সনাক্ত করতে অ্যাপ্লিকেশনটির ডাটাবেসে যে কী রয়েছে তার সাথে কাজ করা উচিত।


জানা ভাল. আমি জানতাম order byএটি ব্যবহারের জন্য অ্যাপ্লিকেশনটি পরিবর্তন করার ইঙ্গিত practice
বেন ব্রোকা

5
সারণির কাঠামো পরিবর্তন ঠিক তাই যে SELECT *ছাড়া ORDER BY পারে "অধিকার" অনুক্রমে ফিরে আসা (কিন্তু এখনও নিশ্চিত নয়)?
অ্যারন বারট্র্যান্ড

একটি ক্লাস্টার ইনডেক্স সহ টেবিল থেকে একটি সহজ নির্বাচন ক্লাস্টার ইনডেক্সের ক্রমে ফিরে আসবে। আমার যতটা পরিষ্কার হওয়া উচিত ছিল না যে এটি যখন একটি নির্দিষ্ট কলাম দ্বারা শারীরিকভাবে ডেটা অর্ডার করা হয়েছিল তখনই এটি একটি উদাহরণ ছিল, তবে অবশ্যই প্রতিটি প্রশ্নের সাথে এটি সঠিকভাবে ফিরে আসবে তা দেওয়া হয়নি। আমার কুলপা।
Wil

5
ক্লাস্টারড ইনডেক্সটি আসলে কী তা বোঝায় না। এসকিউএল সার্ভার বিবিধ বিভিন্ন কারণের ভিত্তিতে অন্য কিছু সূচকের ভিত্তিতে অর্ডারটি ফিরিয়ে দিতে পারে। কিছু কলামে একটি প্রাথমিক কী তৈরি করা গ্যারান্টি দেয় না যে কোনও আদেশ ছাড়াই নির্বাচিত হয়েছে তা হঠাৎ করেই এই কলামটি সর্বদা ফিরে আসবে। আপনি বেশিরভাগ সময় পর্যবেক্ষণ করতে পারেন? অবশ্যই। তবে এটি গ্যারান্টি হিসাবে একই নয়। আমি আমার রাস্তায় কোনও মেরু ভালুক কখনও দেখিনি তবে এমন কোনও পোলার বিয়ারফিল্ড নেই যা এটি ঘটতে বাধা দেয় from
অ্যারন বারট্র্যান্ড

4
যাইহোক আমার বক্তব্যটি ছিল যে ORDER BYটেবিলটিতে স্কিমা পরিবর্তন করা এবং আশা করা যায় যে অর্ডারটি আপনার প্রত্যাশায় চিরকালের জন্য হবে তার চেয়ে ক্লজ যুক্ত করা একটি আরও ভাল গ্যারান্টি (কখনই খুব কম বিঘ্নজনক মনে করবেন না) is
অ্যারন বারট্র্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.