বিট কলামে সূচি যোগ করা উল্লেখযোগ্যভাবে সন্নিবেশকে ধীর করে দেয়?


11

আমার কাছে প্রায় 1 মিলিয়ন থেকে 5 মিলিয়ন রেকর্ড সহ একটি টেবিল রয়েছে। সেই রেকর্ডের ছোট অংশে বিট কলামের একটি 'সত্য' এ সেট করা আছে। দ্রুত সেই রেকর্ডগুলি সন্ধান করা দরকার। আমি মনে করি যে সূচকটি এই কলামটিতে অনুসন্ধানের গতি বাড়িয়ে তুলতে পারে তবে আমি INSERTs সম্পর্কে ভয় পাই। সুতরাং আমার প্রশ্ন।

ডাটাবেসগুলি গুদামজাতীয় ডেটা গুদামের মতো কাজ করছে, তাই এখানে অনেকগুলি SELECTs এবং ছোট (10-10 দিন পর্যন্ত) তবে বেশ বড় INSERTs (একবারে 200 হাজার রেকর্ড পর্যন্ত) রয়েছে। আমি ডাটাবেসে সেই আমদানির দীর্ঘ সময় সম্পর্কে ভীত।


5
এসকিউএল সার্ভারের কোন সংস্করণ? যদি ২০০++ ফিল্টার করা সূচির মতো শোনাচ্ছে তবে আপনার যা প্রয়োজন তা হতে পারে।
মার্টিন স্মিথ

এসকিউএল সার্ভার 2005
মেরিওশ

1
আপনি টেবিলটি বিভক্ত করতে পারেন (কেবলমাত্র একটি কলাম, টেবিলের পিকে সহ একটি নতুন টেবিল যুক্ত করুন যা বিট কলামটি সত্য বলে কেবল সেই সারি দিয়ে পপুলেটে যাবে - শেষ পর্যন্ত আপনি বিট কলামটিও সরিয়ে ফেলতে পারেন)) একটি সূচকযুক্ত আংশিক সূচকগুলির অভাবের সাথে দর্শন কাজ করতে পারে, পাশাপাশি 2005 সালেও কাজ করবে।
ypercubeᵀᴹ

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

উত্তর:


8

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

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


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

2
আসলে আমি একটি পরীক্ষা চালিয়েছি এবং হ্যাঁ এটি সূচকটি ব্যবহার করবে। একটি সারণী তৈরি করুন (আইডি পরিচয়, মাইবিট বিট) 100 টি সারি যুক্ত করুন যেখানে বিট 0 এবং 2000000 যেখানে বিট রয়েছে 1. নিশ্চিত করুন যে পরিসংখ্যান আপডেট হয়েছে (প্রয়োজনে) এবং মাইবিট = 0 এ একটি কোয়েরি চালান এবং সূচকটি ব্যবহার করা হবে।
কেনেথ ফিশার

@ কেনেথফিশার ব্যতীত যথাযথ উচ্চ গতিবেগের ধরণ TRোকাতে TRU / অবিলম্বে FALSE এ আপডেট করার সাথে সাথে পরিসংখ্যানগুলি সর্বদা পুরানো হয়ে যাবে। আপনি যদি পরিষ্কার ডিজাইনের চেয়ে অপ্টিমাইজারের সাথে রাশিয়ান রুলেট খেলতে পছন্দ করেন তবে আপনি যা চান তা পেয়ে যাবেন ...
রিমাস রুসানু

"কখনও কখনও এটি ব্যবহার করবে না" যে বিবৃতিটি 99% কেস ধরে রাখে, তবে ওপি কী ক্ষেত্রে রয়েছে তা আমরা জানি না I আমি সফলভাবে বিটকে সূচি দিয়েছি । ব্যবহারের ক্ষেত্রে বিদ্যমান।
usr

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

2

যেমন @ মার্টিনস্মিথ বলেছেন যে আপনি যদি কখনও এসকিউএল ২০০ to এ আপগ্রেড করেন তবে একটি ফিল্টারড সূচকটি সঠিক সমাধান হবে। তবে সাধারণ সময়ের হিসাবে কোনও ক্ষেত্রে যুক্ত যুক্ত সূচি আপনার লোডের সময় বাড়িয়ে তুলবে। বড় সূচকের চেয়ে ছোট সূচী কম।

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

পরবর্তী বিষয়টি দেখার বিষয়টি হল "আমার কাছে ইতিমধ্যে প্রচুর সূচী রয়েছে?" "প্রচুর পরিমাণ" কী তা সম্পর্কে কোনও কঠোর এবং দ্রুত নিয়ম নেই তবে আমি সাধারণত 10 সূচকের বিধি দ্বারা সীমাবদ্ধতা অবধি সীমাবদ্ধ না হয় যদি না আমার সত্যিই নতুন প্রয়োজন হয়।

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

"তাৎপর্যপূর্ণ" কী তা কেবল আপনিই সিদ্ধান্ত নিতে পারেন। আমার কাছে এমন মেশিন রয়েছে যেখানে লোডের সময়টিতে 5 মিনিট যুক্ত করা "তাৎপর্যপূর্ণ" এবং অন্যান্য যেখানে আমি নিরাপদে কয়েক ঘন্টা বৃদ্ধি দেখতে পেতাম।

সম্পাদনা করুন:

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

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