ধারাটি এসকিউএল-তে কোথায় আসে সেটির ক্রম কি না?


121

ধরা যাক আমার কাছে একটি টেবিল রয়েছে যার নাম PEOPLEরয়েছে 3 টি কলাম ID, LastName, FirstName, এটির কোনও কলামই সূচিযুক্ত নয়।
LastNameআরও অনন্য, এবংFirstName কম অনন্য।

আমি যদি 2 টি অনুসন্ধান করে থাকি:

select * from PEOPLE where FirstName="F" and LastName="L" 
select * from PEOPLE where LastName="L" and FirstName="F"

আমার বিশ্বাস দ্বিতীয়টি দ্রুততর কারণ আরও অনন্য মাপদণ্ড ( LastName) প্রথমটিতে আসেwhere দফায় এবং রেকর্ডগুলি আরও দক্ষতার সাথে মুছে ফেলা হবে। আমি মনে করি না যে অপ্টিমাইজারটি প্রথম স্কয়ারটি অনুকূল করতে যথেষ্ট স্মার্ট।

আমার বোধগম্যতা কি সঠিক?


8
না, এই আদেশের কোনও
গুরুত্ব

3
আপনি যখন এই দুটি বিবৃতি দৌড়েছিলেন তখন আপনার পর্যবেক্ষণগুলি কী ছিল? ফাঁসির পরিকল্পনাগুলি কেমন দেখায়?
কনরাড ফ্রিক্স

3
আপনি একটি নির্দিষ্ট আরডিবিএমএস উল্লেখ করছেন? আসলেই পার্থক্য আছে।
বুর্জান


উত্তর:


101

না, এই অর্ডারটি কোনও ব্যাপার নয় (বা কমপক্ষে: কোনও বিষয় নয়)।

যে কোনও শালীন ক্যোয়ারী অপ্টিমাইজারটি ধারাটির সমস্ত অংশগুলি দেখবে WHEREএবং সেই ক্যোয়ারীটিকে সন্তুষ্ট করার সবচেয়ে কার্যকরী উপায় বের করবে।

আমি জানি যে এসকিউএল সার্ভার ক্যোয়ারী অপ্টিমাইজারটি উপযুক্ত সূচকটি বেছে নেবে - আপনি নিজের দুটি শর্তটি কোন আদেশে রেখেছেন তা বিবেচ্য নয় I আমি মনে করি অন্যান্য আরডিবিএমএসের মতো কৌশল থাকবে।

আপনার কাছে এর জন্য উপযুক্ত সূচক রয়েছে কি না তা কী ব্যাপার!

এসকিউএল সার্ভারের ক্ষেত্রে এটি সম্ভবত একটি সূচক ব্যবহার করবে:

  • একটি সূচক চালু (LastName, FirstName)
  • একটি সূচক চালু (FirstName, LastName)
  • ন্যায়সঙ্গত (LastName)বা কেবল (FirstName)(বা উভয়) একটি সূচক

অন্যদিকে - আবার এসকিউএল সার্ভারের জন্য - আপনি যদি কোনও টেবিল থেকে সমস্ত কলামগুলি SELECT *দখল করতে ব্যবহার করেন , এবং টেবিলটি ছোট হয়, তবে ক্যোরি অপ্টিমাইজারটি ব্যবহারের পরিবর্তে কেবল একটি টেবিল (বা ক্লাস্টার ইনডেক্স) স্ক্যান করবে এমন ভাল সুযোগ রয়েছে there's একটি সূচক (কারণ অন্যান্য সমস্ত কলামগুলি পেতে সম্পূর্ণ ডেটা পৃষ্ঠায় সন্ধান করা খুব দ্রুত ব্যয়বহুল হয়ে যায়)।


যদি কোনও সূচক না থাকে (এস) অপটি সঠিক হতে পারে, তথ্যের উপর নির্ভর করে। সূচী ছাড়াই এভাবে স্মরণ করা কোর্সটি একটি আশ্চর্যজনক সিদ্ধান্ত হবে ...
টনি হপকিনসন

@ টনিহপকিনসন: আমি তা মনে করি না - এমনকি সূচি ছাড়াই আমার সন্দেহ হয় যে এতে কোনও পার্থক্য নেই। সর্বোপরি: সূচক ছাড়া, একটি সম্পূর্ণ টেবিল স্ক্যান ছাড়া আরডিবিএমএস কী করতে পারে, সত্যিই ??
marc_s

2
এসকিউএল সার্ভারের সাথে আকর্ষণীয় সাইড নোট, স্পষ্টতই পূর্বাভাসগুলির মধ্যে নেই অস্তিত্বের ক্রমটি বাস্তবে পরিকল্পনার সৃষ্টিকে প্রভাবিত করতে পারে: bradsruminations.blogspot.com/2010/04/loking-undar-hd.html
জাস্টিন স্বার্টসেল

3
একটি আশ্চর্যের বিষয় হ'ল কোন ক্যোয়ারির প্রথম মৃত্যুদন্ড কার্যকর করার জন্য যেখানে কোনও বিধি শর্ত মেনে চলছে! আমার দুটি শর্ত ছিল, যেমন: WHERE T1.col_1/T2.col_2 > 10 AND T2.col_2 <> 0এবং DIVIDE BY 0ত্রুটি পেয়েছি got আমি ক্রমটি সফলভাবে কার্যকর করা শর্তগুলি আদেশ সরিয়ে দেওয়ার পরে। তারপরে আমি আদেশটি স্যুইচ করেছিলাম তাই আমি আবারও ত্রুটিটি পাওয়ার প্রত্যাশা করব, তবে এবার এটি কার্যকর হয়েছিল! শেষ পর্যন্ত আমার উপসংহারে বলা হয়েছিল যে প্রথমটি চালানোর জন্য আদেশ কার্যকর হয়, যতক্ষণ না মৃত্যুদণ্ড কার্যকর করার পরিকল্পনা তৈরি হয়। 'তাত্পর্যপূর্ণ' কারণটি অপ্টিমাইজার / এক্সিকিউটিভ পরিকল্পনা এটির যত্ন নেবে
রাদু ঘিওরঘিউ

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

19

যেখানে শুল্কের ক্রমটি এসকিউএল স্ট্যান্ডার্ডের সাথে সঙ্গতিপূর্ণ এমন একটি ডাটাবেসে আলাদা হওয়া উচিত নয়। বেশিরভাগ ডাটাবেসে মূল্যায়নের ক্রমটি গ্যারান্টিযুক্ত নয়।

এসকিউএল অর্ডার সম্পর্কে চিন্তা করে ভাববেন না। নিম্নলিখিতটি এসকিউএল সার্ভারে একটি ত্রুটি উত্পন্ন করে:

select *
from INFORMATION_SCHEMA.TABLES
where ISNUMERIC(table_name) = 1 and CAST(table_name as int) <> 0

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


WHERE পূর্বাভাস মূল্যায়নের ক্রমের সাথে ত্রুটির কারণ তৈরি হওয়া এই ক্যোয়ারীর কী সম্পর্ক রয়েছে?
জিম

7
@ জিম যদি ISNUMERIC(table_name) = 1প্রথমে মূল্যায়ন করা হয় CASTতবে কেবলমাত্র সংখ্যার সারণির নামের জন্য ডাকা হবে। তবে যেহেতু এটি প্রথমে মূল্যায়ন করা হয়নি CAST, তত সংখ্যার সারণি নামগুলির জন্যও মূল্যায়ন করা হয়, কারণ ত্রুটির বার্তা তৈরি করে।
হিবলিগ

2
দুর্দান্ত স্পষ্টতা
নতুন

শর্তগুলি অদলবদল করার কারণে এসকিউএল সার্ভার তাদের অন্য উপায়ে হ্যান্ডেল করতে পারে কিনা তা নিশ্চিত হয়েছি তবে এটি উভয় উপায়েই ব্যর্থ হয়। আমি মনে করি এটির দুটি জিনিসেরই অর্থ হতে পারে: (1) এটি অপটিমাইজ করার পাশাপাশি এটি পারে না বা (২) এটি একটি সংকলন-সময় ত্রুটি এবং এসকিউএল এমনকি প্রাথমিক কিছুকে জামিন দিয়ে কোনও কিছুর তুলনা করার চেষ্টাও শুরু করে না। আমার অনুমান যে এটি NR। 2.
লুই

9

এএনএসআই এসকিউএল খসড়া 2003 5WD-01-ফ্রেমওয়ার্ক-2003-09.pdf

.3.৩.৩.৩ বিধি মূল্যায়ন আদেশ

...

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

এখান থেকে অনুলিপি করা


2

না, সমস্ত আরডিবিএম প্রথমে ক্যোয়ারী বিশ্লেষণ করে শুরু করে এবং আপনার যেখানে ক্লজটি পুনরায় অর্ডার করে এটি অনুকূলিত করে।

আপনি কোন আরডিবিএম ব্যবহার করছেন তার উপর নির্ভর করে বিশ্লেষণের ফলাফল কী তা প্রদর্শন করতে পারবেন (উদাহরণস্বরূপ ওরাকলগুলিতে পরিকল্পনার ব্যাখ্যা দেওয়ার জন্য অনুসন্ধান করুন)

এম


এটি সূচকের ভিত্তিতে করে। সুতরাং এটি বিষয়বস্তুর ক্ষেত্রে অপ্রত্যক্ষ।
টনি হপকিনসন

1

মূল ওপি বিবৃতি OP

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

আমার ধারণা আপনি সূচি তৈরির সময় কলামগুলির ক্রম নির্বাচন করে এই বিষয়টিকে বিভ্রান্ত করছেন যেখানে আপনাকে দ্বিতীয় সलेक्टিক এবং দ্বিতীয়টির চেয়ে বেশি নির্বাচিত কলামগুলি আগে রেখে দিতে হবে।

বিটিডাব্লু, উপরোক্ত দুটি প্রশ্নের জন্য এসকিউএল সার্ভার অপ্টিমাইজার কোনও অপ্টিমাইজেশন করবে না তবে ত্রিভিলা পরিকল্পনা ব্যবহার করবে যতক্ষণ না পরিকল্পনার মোট ব্যয় সমান্তরালতা থ্রেশহোল্ড ব্যয়ের চেয়ে কম থাকে is


0

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

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