সূচীতে কলামগুলির ক্রমটি কতটা গুরুত্বপূর্ণ?


173

আমি শুনেছি আপনার এমন কলামগুলি দেওয়া উচিত যা সূচী ঘোষণার শুরুতে সর্বাধিক নির্বাচনী হবে। উদাহরণ:

CREATE NONCLUSTERED INDEX MyINDX on Table1
(
   MostSelective,
   SecondMost,
   Least
)

প্রথমে, আমি কি সঠিক বলছি? যদি তা হয় তবে আমি কি আমার সূচকগুলিতে কলামগুলির ক্রমটি পুনরায় সাজিয়ে কর্মক্ষমতাতে বড় পার্থক্যগুলি দেখতে পাচ্ছি বা এটি "কি করতে ভাল" অনুশীলনের আরও বেশি?

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

উত্তর:


193

এর মতো সূচকটি দেখুন:

Cols
  1   2   3
-------------
|   | 1 |   |
| A |---|   |
|   | 2 |   |
|---|---|   |
|   |   |   |
|   | 1 | 9 |
| B |   |   |
|   |---|   |
|   | 2 |   |
|   |---|   |
|   | 3 |   |
|---|---|   |

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

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

যেহেতু সূচকটিও এইভাবে সঞ্চিত থাকে, তাই আপনি যখন জিজ্ঞাসা করছেন তখন প্রথম কলামটি খুঁজে পাওয়ার জন্য সূচিগুলিতে কোনও ব্যাকট্র্যাকিং নেই।

সংক্ষেপে: না, এটি শোয়ের জন্য নয়, আসল পারফরম্যান্স সুবিধা রয়েছে।


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

3
মনে রাখবেন, মনে করুন আপনার সূচকটি উপরের ছবির মতো, এবং আপনার ক্যোয়ারীটি কলাম 1 এবং কলাম 2 এ ফিল্টার করেছে তবে কলাম 2 আরও অনন্য এবং আপনি যা ফিল্টার করতে চান তা আসলে কলাম 2, তারপরে আরও সূক্ষ্মভাবে সূচক রয়েছে যেখানে এটি আরও কার্যকর কলাম 2 প্রথম। এটি বিপরীতমুখী মনে হতে পারে তবে মনে রাখবেন একটি সূচক বেশ কয়েকটি পৃষ্ঠায় সঞ্চিত রয়েছে এবং এটি একটি বৃক্ষ যা বিভিন্ন মানের রয়েছে, যখন উপরের কলাম 1 টি 1/2 সম্ভাবনাগুলিকে অগ্রাহ্য করে, সূচীটি ইতিমধ্যে জানে যে কোন সূচক পৃষ্ঠাটির জন্য সরাসরি যেতে হবে কলাম 2 মান, সেটটি সঙ্কুচিত করার জন্য কলাম 1 প্রয়োজন হয় না।
কোডকোবয়আরগ

4
এই চিত্রটি সূচকগুলি কীভাবে কাঠামোগত বা নেভিগেট করা হয় তার সঠিক উপস্থাপনা নয়। এই স্ট্যাকওভারফ্লো.com
মার্টিন স্মিথ

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

@ মার্টিনস্মিত আমিও একমত নই যে এটি সঠিক নয়, আপনি যা বর্ণনা করছেন তা কভারেজ সূচকে কীভাবে পৌঁছাবেন তার আদর্শ আচরণ - আপনি যখন পরিসীমা অনুসন্ধানগুলি করছেন তখন নির্বাচকতা আরও গুরুত্বপূর্ণ কারণ এটি সূচক পৃষ্ঠাগুলির সংখ্যাকে ন্যূনতম করে দেয় যা আশাবাদী অবশ্যই স্ক্যান; লক্ষ লক্ষ সারি সহ এটি বড় টেবিলগুলিতে তাৎপর্যপূর্ণ হতে পারে
পল হ্যাচার 28:58

127

কলামগুলির ক্রম সমালোচনাযোগ্য। এখন কোন আদেশটি সঠিক তা আপনি কীভাবে এটি অনুসন্ধান করতে যাচ্ছেন তার উপর নির্ভর করে। একটি সূচক সঠিক অনুসন্ধান বা একটি ব্যাপ্তি স্ক্যান করতে ব্যবহার করা যেতে পারে। সূচীর সমস্ত কলামের মান নির্দিষ্ট করা হয় এবং সারিটির ঠিক উত্তর স্থানে থাকা ক্যোয়ারিতে আগ্রহী An সঠিক কলের সন্ধান করা হয় For কারণ অনুসন্ধানে কলামগুলির ক্রমটি অপ্রাসঙ্গিক। কেবলমাত্র কয়েকটি কলাম নির্দিষ্ট করা থাকে এবং এই ক্ষেত্রে যখন অর্ডারটি গুরুত্বপূর্ণ হয়ে যায় তখন একটি ব্যাপ্তি স্ক্যান হয়। এসকিউএল সার্ভার কেবলমাত্র বামতম স্তম্ভটি সুনির্দিষ্টভাবে নির্দিষ্ট করা থাকলে এবং তারপরে পরবর্তী বামতম স্তম্ভটি নির্দিষ্ট করা থাকলে, এবং ঠিক তেমন একটি পরিসীমা স্ক্যানের জন্য একটি সূচক ব্যবহার করতে পারে। আপনার উপর (এ, বি, সি) একটি সূচক যদি এটির জন্য পরিসীমা স্ক্যান ব্যবহার করা যেতে পারে A=@a, জন্য A=@a AND B=@bকিন্তু না জন্য B=@b, জন্য C=@cকিংবা B=@b AND C=@c। কেস A=@a AND C=@cএক হিসাবে মিশ্রিত হয়A=@aঅংশটি সূচকটি ব্যবহার করবে, তবে C=@cনয় (ক্যোয়ারী সমস্ত বি মান স্ক্যান A=@aকরবে, এতে 'এড়াবে না' C=@c)। অন্যান্য ডাটাবেস সিস্টেমে তথাকথিত 'স্কিপ স্ক্যান' অপারেটর রয়েছে যা বাইরের কলামগুলি নির্দিষ্ট না করা অবস্থায় একটি সূচীতে অভ্যন্তরীণ কলামগুলির কিছুটা সুবিধা নিতে পারে।

সেই জ্ঞানটি হাতে নিয়ে আপনি আবার সূচকের সংজ্ঞাটি দেখতে পারেন। উপরের একটি সূচক (MostSelective, SecondMost, Least)তখন কার্যকর হবে যখন MostSelectiveকলামটি নির্দিষ্ট করা হবে। তবে এটি সর্বাধিক নির্বাচনী, অভ্যন্তরীণ কলামগুলির প্রাসঙ্গিকতা দ্রুত হ্রাস পাবে। খুব প্রায়ই আপনি দেখতে পাবেন যে আরও ভাল সূচক চালু (MostSelective) include (SecondMost, Least)বা চালু রয়েছে (MostSelective, SecondMost) include (Least)। কারণ অভ্যন্তরীণ কলামগুলি কম প্রাসঙ্গিক, সূচকে সঠিক অবস্থানগুলিতে কম নির্বাচনের কলামগুলি স্থাপন করা তাদের সন্ধানের জন্য গোলমাল ছাড়া কিছুই করে না, সুতরাং এগুলি মধ্যবর্তী পৃষ্ঠাগুলি থেকে সরানো এবং কেবল পাতাগুলিতে রেখে দেওয়া বোধগম্য হয় for ক্যোয়ারিবিলিটি উদ্দেশ্য জিজ্ঞাসা করুন। অন্য কথায়, এগুলিকে অন্তর্ভুক্ত করুন। Leastকলামটির আকার বাড়ার সাথে সাথে এটি আরও গুরুত্বপূর্ণ হয়ে ওঠে । ধারণাটি হ'ল এই সূচকটি কেবলমাত্র নির্দিষ্ট করে দেওয়া প্রশ্নের ক্ষেত্রে উপকৃত হতে পারেMostSelective হয় যথাযথ মান বা একটি ব্যাপ্তি হিসাবে এবং কলামটি সর্বাধিক নির্বাচিত হওয়ায় এটি ইতিমধ্যে প্রার্থীর সারিগুলিকে প্রচুর পরিমাণে সীমাবদ্ধ করে।

অন্যদিকে কোনও সূচকটি (Least, SecondMost, MostSelective)ভুল বলে মনে হতে পারে তবে এটি আসলে বেশ শক্তিশালী সূচক। যেহেতু এটির Leastকলামটি এর বহিরাগত ক্যোয়ারী হিসাবে রয়েছে তাই এটি এমন প্রশ্নের জন্য ব্যবহার করা যেতে পারে যেগুলি কম নির্বাচনী কলামগুলিতে সামগ্রিক ফলাফল করতে হয়। এই জাতীয় প্রশ্নগুলি ওএলএপি এবং বিশ্লেষণের ডেটা গুদামগুলিতে প্রচলিত রয়েছে এবং ঠিক এই জায়গাতেই এই জাতীয় সূচকের পক্ষে তাদের পক্ষে খুব ভাল কেস রয়েছে। এ জাতীয় সূচকগুলি আসলে দুর্দান্ত ক্লাস্টারযুক্ত সূচি তৈরি করে, ঠিক কারণ তারা সম্পর্কিত সারিগুলির বৃহত অংশগুলিতে শারীরিক বিন্যাসকে সংগঠিত করে (একই Leastমান, যা সাধারণত কোনও ধরণের শ্রেণি বা প্রকারের ইঙ্গিত দেয়) এবং তারা বিশ্লেষণ অনুসন্ধানগুলি সহজতর করে।

সুতরাং, দুর্ভাগ্যক্রমে, কোনও 'সঠিক' আদেশ নেই। আপনার কোনও কুকি কর্তনকারী রেসিপি অনুসরণ করা উচিত নয় তবে পরিবর্তে আপনি সেই টেবিলগুলির বিপরীতে যে ক্যোয়ারী প্যাটার্নটি ব্যবহার করতে চলেছেন তা বিশ্লেষণ করুন এবং কোন সূচী কলামের ক্রমটি ঠিক তা ঠিক করুন।


3
যথারীতি রেমাসের মতো দুর্দান্ত প্রতিক্রিয়া। আমি আপনার তৃতীয় অনুচ্ছেদটি আরও কয়েকবার পড়তে এবং অনুসরণ করতে যাচ্ছি। আমার সন্দেহ হয় যে আমার যা করা দরকার ঠিক তা হতে পারে।
আবে মিজস্লার

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

এই ব্যাখ্যাটি কি ওরাকল ডিবির জন্য প্রযোজ্য?
আরেকটি

1
@ রইজপি হ্যাঁ, মূলত সূচকের সাথে সম্পর্কিত কোনও ডাটাবেস একই বা খুব একইভাবে কাজ করছে।
তাতরান্সকিমেডভেদ

45

রিমাস যেমন বলেছে এটি আপনার কাজের চাপের উপর নির্ভর করে।

আমি যদিও স্বীকৃত উত্তরের একটি বিভ্রান্তিকর দিকটি সম্বোধন করতে চাই।

সূচকের সমস্ত কলামে সমতা অনুসন্ধান করছে এমন প্রশ্নের জন্য কোনও উল্লেখযোগ্য পার্থক্য নেই।

নীচে দুটি সারণী তৈরি করে এবং সেগুলিকে অভিন্ন ডেটা দিয়ে পপুলেট করে। পার্থক্যটি হ'ল একটিতে কীগুলি বেশিরভাগ থেকে কমপক্ষে নির্বাচনী এবং অন্যটি বিপরীত থেকে অর্ডার করা হয়।

CREATE TABLE Table1(MostSelective char(800), SecondMost TINYINT, Least  CHAR(1), Filler CHAR(4000) null);
CREATE TABLE Table2(MostSelective char(800), SecondMost TINYINT, Least  CHAR(1), Filler CHAR(4000) null);

CREATE NONCLUSTERED INDEX MyINDX on Table1(MostSelective,SecondMost,Least);
CREATE NONCLUSTERED INDEX MyINDX2 on Table2(Least,SecondMost,MostSelective);

INSERT INTO Table1 (MostSelective, SecondMost, Least)
output inserted.* into Table2
SELECT TOP 26 REPLICATE(CHAR(number + 65),800), number/5, '~'
FROM master..spt_values
WHERE type = 'P' AND number >= 0
ORDER BY number;

এখন উভয় টেবিলের বিরুদ্ধে একটি জিজ্ঞাসা করছেন ...

SELECT *
FROM   Table1
WHERE  MostSelective = REPLICATE('P', 800)
       AND SecondMost = 3
       AND Least = '~';

SELECT *
FROM   Table2
WHERE  MostSelective = REPLICATE('P', 800)
       AND SecondMost = 3
       AND Least = '~'; 

... দু'জনেই সূচক জরিমানা ব্যবহার করে এবং উভয়কেই একই ব্যয় দেওয়া হয়।

এখানে চিত্র বর্ণনা লিখুন

গৃহীত উত্তরের এএসসিআইআই আর্ট আসলে সূচকগুলি কীভাবে কাঠামোগত হয় তা নয়। টেবিল 1 এর সূচী পৃষ্ঠাগুলি নীচে উপস্থাপন করা হয়েছে (পূর্ণ আকারে খোলার জন্য চিত্রটিতে ক্লিক করুন)।

এখানে চিত্র বর্ণনা লিখুন

সূচী পৃষ্ঠাগুলিতে পুরো কীটি রয়েছে এমন সারি রয়েছে (সেক্ষেত্রে সারি শনাক্তকারীর জন্য প্রকৃতপক্ষে একটি অতিরিক্ত কী কলাম রয়েছে যা সূচকটি অনন্য হিসাবে ঘোষণা করা হয়নি তবে এটি সম্পর্কে অবহেলা করা যেতে পারে এখানে আরও তথ্য পাওয়া যাবে )।

উপরের ক্যোয়ারির জন্য এসকিউএল সার্ভার কলামগুলির নির্বাচনের বিষয়ে চিন্তা করে না। এটি মূল পৃষ্ঠার একটি বাইনারি অনুসন্ধান করে এবং আবিষ্কার করে যে কীটি (PPP...,3,~ ) রয়েছে >=(JJJ...,1,~ )এবং < (SSS...,3,~ )তাই এটি পৃষ্ঠাটি পড়া উচিত 1:118। এরপরে এটি সেই পৃষ্ঠায় মূল এন্ট্রিগুলির একটি বাইনারি অনুসন্ধান করে এবং নীচে ভ্রমণ করার জন্য পাতার পৃষ্ঠাটি সন্ধান করে।

নির্বাচনের ক্রম অনুসারে সূচকে পরিবর্তন করা বাইনারি অনুসন্ধান থেকে মূল তুলনাগুলির প্রত্যাশিত সংখ্যার বা পৃষ্ঠাগুলির সংখ্যাকে প্রভাবিত করে না যা সূচী অনুসন্ধান করতে নেভিগেট করা দরকার of সেরা এটা পারে সীমিতভাবে কী তুলনা নিজেই গতি বাড়াতে।

কখনও কখনও প্রথমে সর্বাধিক সিলেক্টিক ইনডেক্স অর্ডার করা আপনার কাজের চাপের ক্ষেত্রে অন্যান্য প্রশ্নের জন্য অর্থবোধ করে।

উদাহরণস্বরূপ যদি কাজের চাপে নীচের দুটি ফর্মের প্রশ্ন থাকে।

SELECT * ... WHERE  MostSelective = 'P'

SELECT * ...WHERE Least = '~'

উপরের সূচিগুলি তাদের কোনওটির জন্য আবরণ করছে না। MostSelectiveএকটি সন্ধান এবং সন্ধানের সাথে সার্থক করার জন্য একটি পরিকল্পনা করার পক্ষে যথেষ্ট নির্বাচনী তবে এর বিরুদ্ধে অনুসন্ধানটি Leastনেই।

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

বিপরীত প্রশ্ন যেমন

SELECT MostSelective,
       SecondMost,
       Least
FROM   Table2
WHERE  Least = '~'
ORDER  BY SecondMost,
          MostSelective 

সাধারণভাবে নির্ধারিত একটির বিপরীত ক্রম পেয়ে সহায়তা করা হবে - যেমনটি ক্যোয়ারীটি অন্তর্ভুক্ত রয়েছে, একটি সন্ধানকে সমর্থন করতে পারে এবং বুট করার জন্য কাঙ্ক্ষিত ক্রমে সারিগুলি প্রদান করে।

সুতরাং এটি প্রায়শই পুনর্বার পরামর্শের টুকরো তবে বেশিরভাগ ক্ষেত্রে এটি অন্যান্য প্রশ্নের সম্ভাব্য উপকার সম্পর্কে তাত্পর্যপূর্ণ - এবং এটি আসলে আপনার কাজের বোঝার দিকে তাকানোর কোনও বিকল্প নয় ।


31

আপনার সূচী ঘোষণার শুরুতে কলামগুলি সর্বাধিক নির্বাচনী হওয়া উচিত।

সঠিক। সূচীগুলি একাধিক কলামের সমন্বয়ে সমন্বিত হতে পারে - এবং বামতম নীতির কারণে ক্রমটি গুরুত্বপূর্ণ। কারণ হ'ল, ডাটাবেসটি বাম থেকে ডানে তালিকাটি পরীক্ষা করে এবং সংজ্ঞায়িত অর্ডারের সাথে মিলেছে এমন একটি কলামের রেফারেন্স খুঁজতে হবে। উদাহরণস্বরূপ, কলাম সহ একটি ঠিকানা টেবিলে একটি সূচক থাকা:

  • ঠিকানা
  • শহর
  • রাষ্ট্র

addressকলামটি ব্যবহার করে যে কোনও ক্যোয়ারী সূচকটি ব্যবহার করতে পারে, তবে কোয়েরিতে যদি কেবল cityএবং / অথবা stateউল্লেখ থাকে - সূচিটি ব্যবহার করা যাবে না। এটি হ'ল বামতম কলামটি উল্লেখ করা হয়নি। ক্যোরি পারফরম্যান্স আপনাকে বলা উচিত কোনটি অনুকূল - স্বতন্ত্র সূচকগুলি বা বিভিন্ন অর্ডার সহ একাধিক সংমিশ্রণ। ভাল পঠন: টিপিং পয়েন্ট , কিম্বারলে ট্রিপ্প দ্বারা


যদি এটি কেবলমাত্র ডান কলামটিই ব্যবহৃত হত না তবে কী হবে? সুতরাং একটি ক্যোয়ারী ঠিকানা এবং শহর ব্যবহার করেছে, তবে তা নয়। সূচিটি কি তখন ব্যবহার হবে?
আবে মিজস্লার

@ আবের: ডানদিক ব্যবহার করা হবে না - আপনাকে বাম দিক থেকে সূচক ক্রমটি সন্তুষ্ট করতে হবে। এক মিস, এটি ব্যবহার করতে পারবেন না।
ওএমজি পনিস

4
@ আবে: আপনি যদি ঠিকানা এবং শহর সম্পর্কে জিজ্ঞাসাবাদ করেন তবে তা বিবৃতি না দিয়ে থাকে - তবে হ্যাঁ, সূচকটি ব্যবহার করা হবে। অন্য কথায়, ডাটাবেসটি কোনও অনুরোধ সন্তুষ্ট করতে আংশিক সূচকগুলি ব্যবহার করতে সক্ষম হয়, যতক্ষণ না এটি সূচকের বাম থেকে শুরু করতে এবং অনুসন্ধান করা ক্ষেত্রগুলি ব্যবহার করে ডানদিকে যেতে সক্ষম হয়। তবে, যদি আপনি ঠিকানা এবং রাজ্য ব্যবহার করে খোঁজখবর নেন তবে নগর নয়, তবে এটি এখনও সূচকটি ব্যবহার করতে পারে তবে এটি তেমন দক্ষ হবে না - কারণ এখন এটি কেবল সূচকের ঠিকানা অংশটি ব্যবহার করতে সক্ষম হবে (পরের খ / সি হবে) শহর এবং এটি ক্যোয়ারিতে ব্যবহৃত হচ্ছে না)।
জারেডসি

6

অন্য সমস্ত উত্তর ভুল।

অর্ডার বাছাই করার সময় কোনও যৌগিক সূচীতে পৃথক কলামগুলির নির্বাচনের বিষয়টি বিবেচনা করে না

এখানে সহজ চিন্তার প্রক্রিয়াটি রয়েছে: কার্যকরভাবে, একটি সূচকটি জড়িত কলামগুলির সংমিশ্রণ।

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

সুতরাং, কোন আদেশ ব্যবহার করা উচিত?

  1. কলাম (গুলি) র সাথে পরীক্ষিত দিয়ে শুরু করুন =, ইন কোনো অর্ডার।
  2. তারপরে একটি রেঞ্জ কলামে টেক করুন।

উদাহরণস্বরূপ, খুব নিম্ন-নির্বাচনী কলামটি অবশ্যই এতে প্রথম আসবে:

WHERE deleted = 0  AND  the_datetime > NOW() - INTERVAL 7 DAY
INDEX(deleted, the_datetime)

সূচকটিতে অর্ডার অদলবদল করা এটিকে সম্পূর্ণ উপেক্ষা করবে deleted

(কলামগুলি অর্ডার করার জন্য আরও অনেক বিধি রয়েছে))


আমি ভুল বলে নেতিবাচক ভোট কি? নাকি আমার দৃ strong় মতামত আছে? অথবা অন্য কিছু?
রিক জেমস

আমার ডাউনভোটটি ছিল না, তবে মুছে ফেলা = 0 আমার কাছে মনে হচ্ছে এটি কম চূড়ান্ত নয়? আমি ভাবছি এটি সারণির সারিগুলির সর্বাধিক হবে।
গ্রেগ

@ গ্রেগ - আমি মনে করি এর অর্থ "নিম্ন নির্বাচন" - অর্থাত deletedঅযাচিত সারিগুলিকে ফিল্টারিংয়ে ব্যবহার করা তেমন সাহায্য করে না। আপনার আরও ভাল উদাহরণ আছে? (আমি উত্তরটি লেখার সময় এটিই আমার মনে ছড়িয়ে পড়ে))
রিক জেমস

আমার পক্ষ থেকে ভুল বোঝাবুঝি।
গ্রেগ

1
@ ক্লিকোক - ধন্যবাদ আমার কুকবুকটি কিছু প্রাথমিক তথ্য দেয়: mysql.rjweb.org/doc.php/index_cookbook_mysql
রিক জেমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.