এসকিউএল সার্ভারে আমার কি কিছুটা ক্ষেত্র সূচী করা উচিত?


104

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

তাহলে আমার যদি 100 মিলিয়ন সারি যুক্ত একটি টেবিল থাকে এবং আমি যেখানে রেকর্ডগুলি নির্বাচন করি যেখানে বিট ফিল্ড 1? এবং যাক যাক যে কোনও সময়ে, কেবল হাতে গোনা কয়েকটি রেকর্ড রয়েছে যেখানে বিট ফিল্ড 1 (0 এর বিপরীতে)। এটি কি বিট ক্ষেত্রটি সূচকের পক্ষে মূল্যবান নয়? কেন?

অবশ্যই আমি এটি পরীক্ষা করতে পারি এবং সম্পাদন পরিকল্পনাটি পরীক্ষা করতে পারি এবং আমি এটি করব তবে এর পিছনে তত্ত্ব সম্পর্কেও আমি আগ্রহী। কার্ডিনালিটি কখন গুরুত্বপূর্ণ এবং কখন তা নয়?


এটি কি সাধারণ জিজ্ঞাসা? রেকর্ডগুলির "মুষ্টিমেয়" অনুসন্ধান করার সময় এটি মূল্যবান হতে পারে তবে অন্য সারিগুলিতে আপনাকে খুব বেশি সহায়তা করবে না। ডেটা সনাক্ত করার অন্যান্য উপায় আছে?
জেসন সালডো 23:38

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

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

4
আমি একমত হবে না। যদি আপনার বিতরণ 50/50 হয়, তবে আপনি কখনই সূচকটি ব্যবহার করতে পারবেন না, কারণ এটি কোনও টেবিল স্ক্যান করা কেবল তত দ্রুত। তবে, আপনার যদি কেবল 5, 1 টি মান এবং 1 মিলিয়ন 0 মান থাকে তবে 1 টি অনুসন্ধান করার সময় সূচীটি ব্যবহার করা খুব সম্ভব
কিব্বি

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

উত্তর:


75

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

যখন আপনি সারিগুলির একটি সেট জিজ্ঞাসা করেন, এসকিউএল সারণি স্ক্যানিংয়ের চেয়ে সারিগুলি আরও দ্রুত সন্ধান করতে সূচি ব্যবহার করে (প্রতিটি সারিটির দিকে তাকিয়ে)।

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

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

সুতরাং এসকিউএল যা করছে তা কার্যকরী সেট হ্রাস করার চেষ্টা করছে (সারি সংখ্যা) এটি পুনরাবৃত্তি করতে হবে।

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

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


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

4
আমার আগের মন্তব্যে আমি যা বলতে চাইছি তা হল এই বিবৃতি: "আপনি যখন কিছুটা ক্ষেত্রকে সূচক করেন (বা কিছু সংকীর্ণ পরিসর), আপনি কেবলমাত্র অর্ধেকের কার্যক্রমকে হ্রাস করেন" যদি বিতরণটি একটি মানের দিকে ভারী হয় তবে সত্য হয় না। তবে আপনার উত্তরটি আমার পছন্দ হয়েছে, সুতরাং আপনি যদি এটি ঠিক করেন তবে আমি তা গ্রহণ করব।
জেরেমেক

4
সম্পন্ন. আমি ভাবছিলাম যে এক মিলিয়ন সারিগুলির জন্য, একটি বিট ফিল্ডের 50% বন্টন হবে, তবে আপনি ঠিক বলেছেন যে কোনও নির্দিষ্ট সমস্যার জায়গার জন্য এটি কাজের সেটকে অনেক হ্রাস করতে পারে।
জেফ কক্স 23

সূচকের সাথে এবং ছাড়াও এক্সিকিউশন পরিকল্পনাগুলি সন্ধান করা সার্থক এবং সূচিটি ব্যবহার হচ্ছে কিনা তা দেখুন এবং এটি যদি আপনার প্রশ্নের ব্যয়কে হ্রাস করে তবে। সহজ ও বৈজ্ঞানিক!
onupdatecascade

একটি বিট ফিল্ড ইনডেক্সিং সম্পর্কে আরও একটি ক্ষেত্র? যেমন ওয়েব ক্রিয়াকলাপ লগের মধ্যে একজন টাইমস্ট্যাম্পকে সূচী করে তোলে, তবে অন্য দরকারী সূচকটি দ্রুত সমস্ত https ক্রিয়াকলাপ দেখার জন্য কিছুটা "ISHTTPS" + টাইমস্ট্যাম্পে থাকতে পারে। এটাও কি অদক্ষ হবে?
উপাদান_15939

19

আমি এই প্রশ্নটি পেরিয়ে এসেছি আরেকজনের মাধ্যমে। ধরে নিই যে আপনার বিবৃতিতে যে মুষ্টিমেয় রেকর্ডগুলি 1 এর মান ধরে নেয় (এবং সেইগুলিতে আপনি আগ্রহী হন), তবে একটি ফিল্টার সূচকটি একটি ভাল পছন্দ হতে পারে। কিছুটা এইরকম:

create index [IX_foobar] on dbo.Foobar (FooID) where yourBitColumn = 1

এটি যথেষ্ট পরিমাণে ছোট সূচক তৈরি করবে যেটি যখন আপনার ক্যোয়ারিতে কোনও প্রিডিকেট হয় তখন অপটিমাইজারটি যথেষ্ট স্মার্ট।


4
এটি লক্ষণীয় যে ক্যোয়ারীর প্রিকিকেটটি অবশ্যই ফিল্টার সূচকগুলিতে মানটিতে কোডড থাকতে হবে। আপনি যদি কোনও প্যারামিটারে মানটি পাস করেন yourBitColumn = @value, তবে ফিল্টারড সূচকটি ব্যবহারযোগ্য কিনা তা অপ্টিমাইজার নির্ধারণ করতে পারে না।
geofftnz

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

9

১০০-এর মিলিয়ন রেকর্ডের সাথে কিছু লোকের বিট ফিল্ডটি 1 তে সেট করা আছে? হ্যাঁ, আমি মনে করি বিট ক্ষেত্রের সূচীকরণটি অবশ্যই বিট = 1 রেকর্ডগুলির অনুসন্ধানে গতি বাড়িয়ে তুলবে। আপনার সূচি থেকে লোগারিথমিক অনুসন্ধানের সময় পাওয়া উচিত এবং তারপরে কেবল বিট = 1 রেকর্ডের সাথে কয়েকটি পৃষ্ঠা স্পর্শ করা উচিত। অন্যথায়, আপনাকে 100 মিলিয়ন রেকর্ড সারণীর সমস্ত পৃষ্ঠা স্পর্শ করতে হবে।

আবার, আমি অবশ্যই একটি ডেটাবেস বিশেষজ্ঞ নই এবং গুরুত্বপূর্ণ কিছু অনুপস্থিত হতে পারে।


8

যদি আপনার বিতরণটি বেশ পরিচিত এবং ভারসাম্যহীন হয়, যেমন 99% সারি বিট = 1 এবং 1% বিট = 0 হয়, যখন আপনি বিট = 1 দিয়ে একটি বিভাজন করেন, একটি পূর্ণ টেবিল স্ক্যান প্রায় একই সময়ে হবে সূচক স্ক্যান। যদি আপনি একটি দ্রুত ক্যোয়ারী পেতে চান যেখানে বিট = 0, আমার জানা সর্বোত্তম উপায় হল একটি ফিল্টার সূচক তৈরি করা, যেখানে বিট = যেখানে বিট = 0 যুক্ত করা যায়, সেই সূচকটি কেবল 1% সারিটি সংরক্ষণ করবে। তারপরে WHITE বিট = 0 করার ফলে ক্যোয়ারী অপ্টিমাইজারটি সেই সূচকটি বেছে নিতে দেয় এবং এ থেকে সমস্ত সারি বিট = ০ হবে You ।


4
যদি 99% সারি বিট = 1 হয় তবে অপ্টিমাইজারের সূচি উপেক্ষা করে একটি টেবিল স্ক্যান করা উচিত। সূচকটি ব্যবহার করা আসলে টেবিল স্ক্যানের চেয়ে খারাপ হয়ে উঠবে , কমপক্ষে একটি ঘূর্ণন ড্রাইভে, আরও I / O এবং অবিচ্ছিন্নভাবে ডিস্ক থেকে পড়ে। ফিল্টারড সূচক (পোস্টগ্রিস সমতুল্য: আংশিক সূচক) যাওয়ার উপায়। আমি অনুমান করি কারণ এটি প্রশ্নের বহু বছর পরে, এই উত্তরটি তার প্রাপ্য ভোটগুলি পায় নি।
অ্যান্ড্রু লাজার 23

7

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

আপনার অ্যাপ্লিকেশনটি প্রায়শই সক্রিয় গ্রাহকদের সন্ধান করলে একটি সাধারণ উদাহরণ হ'ল লাস্টনামের পরিবর্তে ACTIVE, LASTNAME এ একটি সূচক হবে।


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

7

আপনি যদি এটি না পড়ে থাকেন তবে জেসন ম্যাসি সম্প্রতি একটি নিবন্ধ লিখেছিলেন যাতে এই বিষয়টি নিয়েই আলোচনা হয়েছিল।

http://statisticsio.com/Home/tabid/36/articleType/ArticleView/articleId/302/Never-Index-a-BIT.aspx

সম্পাদনা করুন: নতুন নিবন্ধের অবস্থান - http://sqlserverpedia.com/blog/sql-server-bloggers/never-index-a-bit

আগে "নতুন" নিবন্ধের অবস্থানের জন্য ওয়েব্যাক মেশিন: http://web.archive.org/web/20120201122503/http://sqlserverpedia.com/blog/sql-server-bloggers/never-index-a-bit/

নতুন এসকিউএল সার্ভার পিডিয়ার অবস্থান টোডওয়ার্ল্ড, যা কেনেথ ফিশারের একটি নতুন নিবন্ধ রয়েছে যা এই বিষয়ে আলোচনা করছে:

http://www.toadworld.com/platforms/sql-server/b/weblog/archive/2014/02/17/dba-myths-an-index-on-a-bit-column-will-never-be- Used.aspx

ওয়েবব্যাক মেশিন: http://web.archive.org/web/20150508115802/http://www.toadworld.com/platforms/sql-server/b/weblog/archive/2014/02/17/dba-myths-an -আইডেক্স-অন-বিট-কলাম-উইল-কখনও-ব্যবহৃত হবে না as স্পেস


এই নিবন্ধটি আর দৃশ্যমান নয়
হোমার 6

@ হোমার 6 আমি এই নিবন্ধটির জন্য নতুন বাড়ির মতো দেখতে একটি লিঙ্ক যুক্ত করেছি।
জেফ

নতুন লিঙ্কটি টড ওয়ার্ল্ড হোমপেজে যায়।
এন ওয়েস্ট

ওয়েব্যাক মেশিন ব্যবহার করে নিবন্ধটি খুঁজে পেয়েছে এবং একটি নতুন সম্পর্কিত নিবন্ধ পেয়েছি। আশাকরি এটা সাহায্য করবে.
জেফ

2

অবশ্যই এটি মূল্যবান, বিশেষত যদি আপনাকে সেই মানটি দিয়ে ডেটা পুনরুদ্ধার করতে হয়। এটি একটি সাধারণ ম্যাট্রিক্স ব্যবহারের পরিবর্তে স্পার্স ম্যাট্রিক্স ব্যবহার করার মতো হবে।

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


2

অন্যরা যেমন বলেছে, আপনি এটি পরিমাপ করতে চাইবেন। আমি এটি কোথায় পড়েছি তা মনে নেই, তবে একটি সূচক কার্যকর হওয়ার জন্য একটি কলামে খুব উচ্চ কার্ডিনালিটি (প্রায় 95%) থাকা দরকার। এর জন্য আপনার সেরা পরীক্ষাটি হ'ল সূচক তৈরি করা এবং বিআইটি ক্ষেত্রের 0 এবং 1 মানের জন্য কার্যকরকরণ পরিকল্পনাগুলি পরীক্ষা করা। যদি আপনি নির্বাহ পরিকল্পনায় কোনও সূচক অপারেশন দেখতে পান তবে আপনি জানেন যে আপনার সূচক ব্যবহার করা হবে।

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

কিছু তথ্য sql-server-performance.com ফোরামে এবং রেফারেন্স করা নিবন্ধে পাওয়া যাবে


এটি সামগ্রিকভাবে কলামের কার্ডিনালিটির মতো নয়। এটি হ'ল দ্য ক্লিয়ারটিভিটি। সুতরাং যদি মান 1 সহ কয়েকটি কলাম থাকে তবে এটি সূচকে ভাল হতে পারে। যদি এটি 50/50 হয় (যেমন পুরুষ / মহিলা) তবে এটির পক্ষে মূল্য নয়।
ডাব্লুডাব্লু

2

"আমি এক পর্যায়ে পড়ে মনে করি যে নিম্ন কার্ডিনালিটি (স্বতন্ত্র মানের একটি কম সংখ্যক) সহ একটি ক্ষেত্রকে সূচনা করা সত্যিই উপযুক্ত নয়"

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


2

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

http://www.microsoft.com/technet/prodtechnol/sql/2005/impprfiv.mspx

এই সমস্ত অনুমান করে আপনি মাইক্রোসফ্ট এসকিউএল সার্ভার 2005 এন্টারপ্রাইজ। একইটি 2008 এর ক্ষেত্রেও প্রযোজ্য, আমি সেই সংস্করণটির সাথে পরিচিত নই।


2

যদি আপনি জানতে চান যে কোনও সূচকের আপনার পছন্দের প্রভাবগুলি রয়েছে কিনা: পরীক্ষা এবং পরীক্ষা আবার।

সাধারণভাবে আপনি এমন একটি সূচি চান না যা আপনার টেবিলকে যথেষ্ট সংকুচিত করে না, কারণ একটি সূচক বজায় রাখার জন্য ব্যয়। (ব্যয়> মুনাফা)। তবে যদি আপনার ক্ষেত্রে সূচকটি টেবিলটি অর্ধেক করে দেয় তবে আপনি টেবিলের উপরে রেখে কিছু অর্জন করতে পারেন। এটি সব আপনার টেবিলের সঠিক আকার / কাঠামোর উপর নির্ভর করে এবং আপনি এটি কীভাবে ব্যবহার করছেন (পঠন / লেখার সংখ্যা)।


1

নিজস্বভাবে, এটির ফলে খুব অল্প নির্বাচনের ফলস্বরূপ। যৌগিক সূচকের অংশ হিসাবে। সম্ভবত সম্ভবত তবে অন্যান্য সমতা কলামগুলির পরে।


1

আপনি করতে পারেন না সূচক SQL সার্ভার 2000 সালে একটি বিট ক্ষেত্র, যেমন সময়ে বই অনলাইন নির্দেশিত হয়েছে:

বিট

পূর্ণসংখ্যার ডেটা টাইপ 1, 0, বা NULL।

মন্তব্য

বিট প্রকারের কলামগুলিতে সূচি থাকতে পারে না।

হ্যাঁ, কয়েক লক্ষের মধ্যে যদি আপনার হাতে কয়েক মুঠো সারি থাকে তবে একটি সূচক সাহায্য করবে। তবে আপনি যদি এই ক্ষেত্রে এটি করতে চান তবে আপনার কলামটি একটি করা দরকার tinyint

দ্রষ্টব্য : এন্টারপ্রাইজ ম্যানেজার আপনাকে কিছুটা কলামে একটি সূচি তৈরি করতে দেবে না। আপনি যদি চান তবে আপনি কিছুটা কলামে ম্যানুয়ালি একটি সূচি তৈরি করতে পারেন:

CREATE INDEX IX_Users_IsActiveUsername ON Users
(
   IsActive,
   Username
)

তবে এসকিউএল সার্ভার 2000 আসলে এই জাতীয় সূচী ব্যবহার করবে না - এমন কোয়েরি চালাচ্ছে যেখানে সূচকটি নিখুঁত প্রার্থী হবে, যেমন:

SELECT TOP 1 Username 
FROM Users
WHERE IsActive = 0

পরিবর্তে এসকিউএল সার্ভার 2000 একটি টেবিল স্ক্যান করবে, সূচি এমনকি অস্তিত্ব নেই এমন অভিনয় করে। আপনি যদি একটি tinyint SQL সার্ভার 2000 কলাম পরিবর্তন করেন তাহলে হবে না একটি সূচক চাইতে। এছাড়াও, নিম্নলিখিত অ-আচ্ছাদিত ক্যোয়ারী:

SELECT TOP 1 * 
FROM Users
WHERE IsActive = 0

এটি একটি সূচক সন্ধান সম্পাদন করবে, তারপরে বুকমার্ক অনুসন্ধান করবে।


এসকিউএল সার্ভার 2005 বিট কলামে সূচিগুলির জন্য সীমিত সমর্থন করে support উদাহরণ স্বরূপ:

SELECT TOP 1 Username 
FROM Users
WHERE IsActive = 0

প্রচ্ছদ সূচক মাধ্যমে একটি সূচক সন্ধান করতে হবে। তবে আচ্ছাদনহীন কেস:

SELECT TOP 1 * 
FROM Users
WHERE IsActive = 0

বুকমার্ক অনুসন্ধানের পরে কোনও সূচক অনুসন্ধানের কারণ হবে না, এটি বুকমার্ক অনুসন্ধানের অনুসারে সূচিপত্র অনুসন্ধানের চেয়ে টেবিল স্ক্যান (বা ক্লাস্টারড ইনডেক্স স্ক্যান) সম্পাদন করবে।

পরীক্ষা এবং সরাসরি পর্যবেক্ষণ দ্বারা যাচাই করা হয়েছে।


এফওয়াইআই - এসকিউএল সার্ভার 2005 ম্যানেজমেন্ট স্টুডিও আপনাকে এটি করতে দেয়।
জেরেমেক

এসকিউএল সার্ভার 2000-এর আমার অনুলিপিটি আমাকে একটি কলামে একটি সূচি সেট করতে দিন।
কিব্বি

এসকিউএল সার্ভার 2000-এর আমার অনুলিপি আমাকে কিছুটা কলামে একটি সূচি সেট করতে দেয় না।
ইয়ান বয়ড 21

1

খুব দেরিতে উত্তর ...

হ্যাঁ, এটি এসকিউএল ক্যাট টিম অনুসারে কার্যকর হতে পারে (আপডেট হয়েছে, একীভূত হয়েছে)


4
লিঙ্কটি এখন মারা গেছে বলে মনে হচ্ছে। তবে, মনে হয় যে পোস্টটি বেশ কয়েকটি ই-বুকের সাথে একত্রিত হয়েছে । রেফারেন্সযুক্ত বিভাগটি 86 পৃষ্ঠায় শুরু হয় S " এসকিউএলএসিএটি'র গাইড টু রিলেশনাল ইঞ্জিন" লিঙ্কের অধীনে ই- বুকটি এসকিউএলএইচটি.কম ইবুক থেকে ডাউনলোড করা যেতে পারে ।
mwolfe02

0

এটি কি সাধারণ জিজ্ঞাসা? রেকর্ডগুলির "মুষ্টিমেয়" অনুসন্ধান করার সময় এটি মূল্যবান হতে পারে তবে অন্য সারিগুলিতে আপনাকে খুব বেশি সহায়তা করবে না। ডেটা সনাক্ত করার অন্যান্য উপায় আছে?


0

কার্ডিনালিটিটি একটি ফ্যাক্টর, অন্যটি সূচকটি আপনার ডেটাটিকে কতটা ভাগ করে দেয়। আপনার যদি প্রায় অর্ধ 1s এবং অর্ধ 0s হয়, তবে এটি সাহায্য করবে। (ধরে নিলাম যে সূচকটি অন্য কোনও সূচকের চেয়ে সেরা পথ বেছে নেওয়া)। তবে আপনি কতবার ?োকাচ্ছেন এবং আপডেট করছেন? নির্বাচন সম্পাদনের জন্য সূচীগুলি যুক্ত করা INSERT, আপডেট এবং ডিলিট পারফরম্যান্সকেও আহত করে, তাই এটি মনে রাখবেন।

আমি বলব, যদি 1s থেকে 0s (বা বিপরীতে) 75% থেকে 25% এর চেয়ে ভাল না হয়, বিরক্ত করবেন না।


4
আমি একমত হবে না। যদি আপনার বিতরণ 50/50 হয়, তবে আপনি কখনই সূচকটি ব্যবহার করতে পারবেন না, কারণ এটি কোনও টেবিল স্ক্যান করা কেবল তত দ্রুত। তবে, আপনার যদি কেবল 5, 1 টি মান এবং 1 মিলিয়ন 0 মান থাকে তবে 1 টি অনুসন্ধান করার সময় সূচীটি ব্যবহার করা খুব সম্ভব
কিব্বি

0

প্রতিক্রিয়া সময় আগে এবং পরে পরিমাপ এবং দেখুন এটি সার্থক কিনা; তাত্ত্বিকভাবে সূচিকৃত ক্ষেত্রগুলি ব্যবহার করে অনুসন্ধানগুলির জন্য পারফরম্যান্সের উন্নতি করা উচিত তবে এটি সত্য / মিথ্যা মানগুলির বিতরণ এবং আপনার উদ্বিগ্ন প্রশ্নের সাথে জড়িত অন্যান্য ক্ষেত্রগুলির উপর নির্ভর করে


0

আয়ান বয়েড তখন সঠিক যখন তিনি বলেন যে আপনি এসকিউএল 2000 এর জন্য এন্টারপ্রাইজ ম্যানেজারের মাধ্যমে এটি করতে পারবেন না (এটি টি-এসকিউএল মাধ্যমে তৈরি করার বিষয়ে তার নোট দেখুন)।


0

আপনার জিজ্ঞাসা করার জন্য আপনাকে এখানে স্মার্ট হতে হবে, আপনার সিস্টেমে সত্যের বোঝা বেশি থাকলে আপনি অবশ্যই আপনার কলামে লোড মানটি জেনে থাকতে পারেন এবং মিথ্যা নয় তা পরীক্ষা করার জন্য আপনার সমস্ত প্রশ্নের সাথে সত্যিকারের মানগুলি রেকর্ড করতে চান .. এটি অনেক সাহায্য করবে , এটা ঠিক কৌতুক।

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