যদি কোনও ডাটাবেসে কেবল কখনও একটি সন্নিবেশ থাকে, তবে প্রতিটি কলামের সংমিশ্রণকে সূচি দেওয়া কি খারাপ?


23

আমি একটি প্রতিবেদনের সিস্টেমে কাজ করছি যার জন্য বড় নির্বাচনী প্রশ্নের প্রয়োজন হবে তবে এটি কেবলমাত্র একবার পূরণ করা একটি ডাটাবেসের উপর ভিত্তি করে। ডাটাবেস ম্যানেজমেন্ট সিস্টেমটি মাইক্রোসফ্ট এসকিউএল সার্ভার 2017 Server এটির মতো একটি সিস্টেম ডিজাইনের সম্ভবত আরও ভাল উপায় আছে তবে আসুন আমরা এই তাত্ত্বিকভাবে যোগাযোগ করি।

তাত্ত্বিকভাবে বলতে:

  1. আমাদের যদি খুব বড় ডেটাবেস থাকে (বেশ কয়েকটি টেবিলের উপরে 150M + সারি)
  2. এবং আমরা ধরে নিতে পারি যে ডাটাবেসটি কেবল একবারই পপুলেটেড হবে।

প্রতিটি সম্ভাব্য কলাম সংমিশ্রণের সূচকে দেওয়া কোনও প্রশ্নের উপরে নেতিবাচক কর্মক্ষমতা প্রভাব ফেলতে পারে?


4
প্রতিটি সম্ভাব্য সংমিশ্রণ বেশিরভাগ সময় অবৈধ। আরও বুদ্ধিমান পন্থা হ'ল ম্যানুয়ালি তবে খুব উদারভাবে index এটি অবশ্যই উপলব্ধি করতে পারে।
usr

12
আমি আপনার শিরোনাম বা আপনার গাed় পাঠ্যটিকে পুনরায় রেকর্ড করার পরামর্শ দিচ্ছি যাতে তারা ধারাবাহিক থাকে। এক নজরে আমি সর্বোচ্চ ভোটের উত্তর "হ্যাঁ" দ্বারা বিভ্রান্ত হয়ে পড়েছিলাম
আআআআআআআআআআআআআআআ

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

উত্তর:


36

হ্যাঁ, এটি প্রাথমিক পরিকল্পনার সংকলন সময়কে প্রভাবিত করবে কারণ অপ্টিমাইজারের ডেটা বিবেচনার জন্য অনেকগুলি অতিরিক্ত অ্যাক্সেস পাথ থাকবে।

যেহেতু আপনি এসকিউএল সার্ভারে আছেন 2017, একবার লোড হচ্ছে এবং প্রতিবেদনগুলি চালাচ্ছে, তার পরিবর্তে কেবল একটি ক্লাস্টার কলাম স্টোর সূচী কেন ব্যবহার করবেন না?

এটি প্রতিটি সম্ভাব্য কলাম সংমিশ্রণের সূচকে আপনার প্রয়োজনের আদর্শ সমাধান বলে মনে হয়।

কলামস্টোর সূচী - সংক্ষিপ্ত বিবরণ


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

26

যদি আপনার কোনও টেবিলে এন কলাম থাকে, তবে প্রতিটি কলামের সংমিশ্রণ 2 ^ N-1 হয় (খালি সেটটি সরিয়ে ফেলছে)। 10 টি কলামের জন্য যার অর্থ 1023 সূচক, 20 টি কলামের জন্য আমরা একটি সম্পূর্ণ 1048575 সূচী দিয়ে শেষ করব। সূচকের বেশিরভাগটি কখনই ব্যবহার করা হবে না তবে এটি অপ্টিমাইজারের দ্বারা বিবেচনা করা উচিত। এটি সম্ভব হয় যে অপটিমাইজার আরও ভালগুলির পরিবর্তে একটি উপ-অনুকূল সূচকটি বেছে নেবে। প্রকৃতপক্ষে কোন সূচকগুলি উপকারী হবে তা নির্ধারণের পরিবর্তে আমি সমস্ত প্রকারের সূচক উত্পন্ন করার পথ গ্রহণ করব না।

সম্পাদনা সম্ভব সূচকের সংখ্যা সংশোধন করে

জেফ যেমন দেখিয়েছেন যে এটি 2 ^ N (পাওয়ার-সেট) এর চেয়েও খারাপ, যেহেতু (3,2,1) স্পষ্টতই (1,2,3) থেকে পৃথক। এন কলামগুলির জন্য আমরা সূচীতে প্রথম অবস্থানটি চয়ন করতে পারি যাতে এন উপায়ে সমস্ত কলাম রয়েছে। এন -1 উপায়ে ইত্যাদিতে দ্বিতীয় অবস্থার জন্য আমরা তাই এন দিয়ে শেষ করি! পূর্ণ আকারের বিভিন্ন সূচী। এই সূচির কোনওটিই এই সেটটিতে অন্য সূচকের দ্বারা গ্রাহ্য নয়। তদতিরিক্ত, আমরা আরও একটি সংক্ষিপ্ত সূচক যুক্ত করতে পারি না যাতে এটি কোনও পূর্ণ সূচী দ্বারা আচ্ছাদিত না হয়। সূচকের সংখ্যা তাই এন! 10 কলামের উদাহরণস্বরূপ, তাই 10 হয়ে যায়! = 3628800 সূচক এবং 20 (ড্রামরল) 2432902008176640000 সূচী জন্য। এটি একটি হাস্যকর আকারে বড় সংখ্যা, যদি আমরা প্রতিটি সূচির জন্য এক মিমি অংশের জন্য একটি বিন্দু রাখি, তবে সমস্ত বিন্দুগুলি পাস করতে একটি লাইটবিম লাগবে 94 দিন। সমস্ত এবং সব, না ;-)


6
আরও খারাপ: সূচীতে কলামগুলির ক্রম গুরুত্বপূর্ণ হতে পারে। অতএব আপনি সর্বাধিক এন পান! ইনডেক্স।
জেফ

2
তবে আপনার সূচীর দরকার নেই যা অন্যান্য সূচকের উপসর্গ হয়।
বার্মার

3
এটা আরও খারাপ। প্রতিটি সূচকের জন্য রয়েছে এএসসি এবং ডিইএসসি সমন্বয়।
ypercubeᵀᴹ

2
এবং আরও খারাপ, ইনক্লুড সূচকগুলি রয়েছে।
ypercubeᵀᴹ

2
এবং বিশাল সংখ্যক আংশিক সূচক।
ypercubeᵀᴹ

7

না।

এটি "সবকিছু" সূচীকরণের জন্য ব্যবহারিক নয়, তবে আপনি এর "সর্বাধিক" সূচক করতে পারেন।

এই যে জিনিসটা. যদি কোনও টেবিলে Nকলাম থাকে, তবে সম্ভাব্য সূচীর সংখ্যা N!। ধরা যাক একটি টেবিলের 10 টি কলাম রয়েছে, তবে আপনার কেবল 10সম্ভাব্য সূচী নেই, তবে 10!। এটি ... একক টেবিলে ... 3,628,800 ... এটি ডিস্কের অনেক জায়গা, ডিস্ক আই / ও, ক্যাশে এবং সময় সন্ধান করে।

কেন? কয়েকটি কারণ:

  • লাইটওয়েট সূচকগুলি সাধারণত ক্যাশে করা হয়, এমন কিছু যা তাদের দ্রুত হালকা করে তোলে। আপনার যদি তাদের মধ্যে 3 মিলিয়ন থাকে তবে তারা ক্যাশে হবে না।

  • এসকিউএল অপ্টিমাইজারটি কোনটি ব্যবহার করা ভাল, বিশেষত যোগদানের সময় ব্যবহার করার সময় এটি অনেক সময় নিতে পারে।

  • এসকিউএল অপ্টিমাইজারটি বিস্তৃত অ্যালগরিদম ব্যবহার ছেড়ে দিতে পারে এবং পরিবর্তে একটি হিউরিস্টিক অ্যালগরিদম চেষ্টা করে। এটি "অনুকূল থেকে কম" হতে পারে। উদাহরণস্বরূপ পোস্টগ্রিএসকিউএল-এর কাছে "8-এর চেয়ে কম টেবিল ক্যোয়ারী" এবং "8-এর চেয়ে বেশি টেবিল ক্যোয়ারী" এর জন্য বিভিন্ন বিকল্প রয়েছে।

  • সূচকগুলি গাদা থেকে হালকা হওয়ার কথা। আপনি যদি সমস্ত কিছু সূচক করে থাকেন তবে সূচকটি গাদা হিসাবে ভারী হয়ে যায় ... এমন কিছু যা সূচকের উদ্দেশ্যকে পরাস্ত করে।


সংখ্যাটি 2 ^ 10 নয়? প্রতিটি কলাম হয় হয় অন্তর্ভুক্ত বা প্রদত্ত সূচী থেকে বাদ। অর্ডার কি ব্যাপার?
রেমকো গ্রিলিচ

2
@ রেমকো গ্রিলিচ হ্যাঁ, আদেশটি গুরুত্বপূর্ণ।
ypercubeᵀᴹ

2

না, এটি সম্ভবত SELECTপ্রশ্নের উপর নেতিবাচক প্রভাব ফেলবে না , কিন্তু

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

এটি সম্পূর্ণরূপে সংকলন সময়ের জন্য সমস্যার কারণ হতে পারে।
এরিক ডার্লিং

@sp_BlitzErik আপনি কি অ্যাপটিতে ORM মনে করেন?
পিটার বলেছেন

না, আমার উত্তর দেখুন।
এরিক ডার্লিং

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