একটি সূচক নাকি দুটো?


11

আমি আমার ডাটাবেসে একটি টেবিলে নিম্নলিখিত সূচক তৈরি করেছি:

CREATE INDEX [idx_index1]
on [table1]
(col1, col2, col3)

সার্ভারটি নিম্নলিখিত 'অনুপস্থিত' সূচকের পরামর্শ দিচ্ছে:

CREATE INDEX [idx_index2]
on [table1]
(col1, col2)
INCLUDE (col3, col4, col5, col6....)

আমার বজায় রাখা দরকার এমন একটি নতুন সূচি তৈরির পরিবর্তে প্রস্তাবিত কলামগুলি অন্তর্ভুক্ত করার জন্য বিদ্যমান সূচী সংজ্ঞাটি সংশোধন করা যৌক্তিক বলে মনে হয়। একটি কোয়েরি যা কল 1 এবং কল 2 তে নির্বাচন করে সূচি 1 ঠিক সূচক 2 এর মতো কার্যকরভাবে ব্যবহার করতে পারে। আমি কি ঠিক করছি নাকি আমি কিছু মিস করছি?

উত্তর:


12

এবং সুতরাং কর্মক্ষমতা টিউনিং এবং সূচী কৌশল কৌশল শিল্প প্রবেশ করে ...

প্রস্তাবিত কলামগুলি অন্তর্ভুক্ত করতে বিদ্যমান সূচী সংজ্ঞাটি সংশোধন করা আমার পক্ষে যুক্তিযুক্ত বলে মনে হচ্ছে

আমি আপনার উদ্ধৃতি নিতে এবং একটি তৃতীয় সূচক সংজ্ঞা লিখতে যাচ্ছি:

create index [idx_index3]
on [table1] (col1, col2, col3)
include (col4, col5, col6....);

এটি CREATE INDEXআপনার বক্তব্য বিবৃতিতে অনুরূপ বিবৃতি হওয়া উচিত ।

এটি খুব ভাল একটি বুদ্ধিমান সমাধান হতে পারে, তবে এটি নির্ভর করে । এখানে আমি কয়েকটি উদাহরণ দিচ্ছি যখন আমি বলি যে এটি নির্ভর করে।

আপনার যদি এমন একটি সাধারণ কাজের চাপ থাকে যা বেশিরভাগ ক্ষেত্রে এই জাতীয় কোয়েরি নিয়ে থাকে:

select col1, col2, col3
from table1
where col1 = 1
and col2 = 2
and col3 = 3;

তারপরে আপনার idx_index1সূচকটি শক্ত হবে। পুরোপুরি সংকীর্ণ, এটি এমন একটি সূচক যা এই ক্যোয়ারিকে কোনও বহিরাগত ডেটা ছাড়াই সন্তুষ্ট করে (ক্লাস্টার ইনডেক্স সংজ্ঞাটি বিবেচনায় না নিলে, যদি তা মোটেও হয়)।

তবে আপনার যদি এমন কাজের চাপ থাকে যা মূলত নিম্নলিখিতগুলির মতো প্রশ্নগুলি নিয়ে থাকে:

select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2;

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

আপনার সুপারিশের সাহায্যে এটি নীচের মত একটি প্রশ্নের জন্য উপযুক্ত হবে:

select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2
and col3 = 3;

আপনার idx_index3প্রস্তাবনাটি একটি আচ্ছাদন সূচক হবে যা উপরের প্রশ্নের জন্য অনুসন্ধানের মানদণ্ডকে সন্তুষ্ট করে।

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

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

আপনি যদি বুদ্ধিমান সূচক কৌশলগুলি বোঝেন এবং আপনি আপনার সাধারণ কাজের চাপ বুঝতে পারেন, তবে তাদের উভয়কে প্রয়োগ করে আপনি কী সেরা পথে নেবেন তা নিয়ে আসতে সক্ষম হবেন।


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

হ্যাঁ :-) ভাল ধরা। আমি এটি সম্পাদনা করেছি।
থমাস স্ট্রিংজার

উল্লেখ করার দরকার নেই যে যদি টেবিলটিতে কেবল 1-6 কলস থাকে তবে এটি সূচক 1 এবং 2 এর থেকে বেশ নির্বোধ এবং 3-5 অন্তর্ভুক্ত।
কেনেথ ফিশার

1
@ কেনেথফিশার - এটি নির্বোধ হবে কেন? আপনার ডাটাবেস কাঠামো এবং আপনার কাজের চাপ যদি এটির নিশ্চয়তা দেয় তবে এটি করার পক্ষে যুক্তিযুক্ত যথেষ্ট জিনিস মনে হয়। উদাহরণস্বরূপ, যদি আপনার কাছে এমন একটি কোয়েরি রয়েছে যা 1 এবং 2 কলামগুলির মানগুলির উপর ভিত্তি করে 1-5 কলামগুলি নির্বাচন করে এবং সম্ভবত 6 কলামটি একটি এনভারচার (সর্বাধিক) কলাম যা আপনি আপনার সূচকটি ফুটিয়ে তুলতে চান না।
পলএইচ

1
@ পলএহহহ সম্ভবত এটি আমার মতামত তবে আপনি পর্যায়ে পর্যায়ে কলাম যুক্ত করেছেন যে আপনার সূচকে টেবিলে আপনার কলামের 90 +% রয়েছে আপনি নিজের সূচিটি এমন বিন্দুতে প্রসারণ করেছেন যে টেবিলটিতে যাওয়ার জন্য অতিরিক্ত পড়তে হবে নিজেই সব গুরুত্বপূর্ণ নয়। এখন অবশ্যই ব্যতিক্রম রয়েছে .. যদি কলস 1-5 সমস্ত ইনট এর হয় এবং কল 6 একটি বর্ণচর (সর্বোচ্চ) হয় তবে আমি এটি করতে পারি। তবে সাধারণভাবে আমি সেইগুলি খুব সাবধানতার সাথে দেখব।
কেনেথ ফিশার

7

আপনি সত্যই সঠিক এবং আবিষ্কার করেছেন যে ডিবিএর জন্য সর্বদা অনুপস্থিত সূচক ডিএমভি ইত্যাদির দ্বারা দেওয়া "পরামর্শগুলি" পর্যালোচনা করা কেন গুরুত্বপূর্ণ discovered

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


3

থমাসের জবাবের অন্তর্নিহিত বিষয়ের আরও একটি বিষয়:

সে বলেছিল:

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

সুতরাং, আরও একটি বড় প্রশ্ন হয়ে ওঠে: কতবার সারণি আপডেট করা হয়?

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

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

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

আছে HTH ...

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