কোনও পিকে সূচীতে কলামগুলির ক্রমের বিষয়টি বিবেচনা করে?


33

আমার একই বেসিক স্ট্রুকচার সহ কয়েকটি খুব বড় টেবিল রয়েছে। প্রত্যেকের একটি RowNumber (bigint)এবং DataDate (date)কলাম রয়েছে। প্রতিদিন রাতে এসকিউএলবুল্ক ইমপোর্ট ব্যবহার করে ডেটা লোড হয় এবং কোনও "নতুন" ডেটা লোড হয় না - এটি একটি historicalতিহাসিক রেকর্ড (এসকিউএল স্ট্যান্ডার্ড, এন্টারপ্রাইজ নয়, তাই কোনও বিভাজন নয়)।

কারণ প্রতিটি বিট ডেটা অন্য সিস্টেমে আবার বাঁধা থাকা দরকার এবং প্রতিটি RowNumber/DataDateসংমিশ্রণটি অনন্য, এটি আমার প্রাথমিক কী।

আমি লক্ষ্য করেছি যে এসএসএমএস সারণি ডিজাইনারের মধ্যে আমি পিকে সংজ্ঞায়িত করার কারণে RowNumberপ্রথম এবং DataDateদ্বিতীয় তালিকাভুক্ত ।

আমি আরও লক্ষ্য করেছি যে আমার খণ্ডটি সর্বদা খুব বেশি ~ 99%।

এখন, যেহেতু প্রত্যেকে DataDateকেবল একবার উপস্থিত হয়, আমি প্রত্যাশা করবো যে সূচকটি কেবল প্রতিদিন পৃষ্ঠাগুলিতে যুক্ত হবে তবে আমি অবাক হয়েছি যে এটি যদি RowNumberপ্রথম ভিত্তিতে সূচক হয়, এবং অন্যদিকে সমস্ত কিছু সরিয়ে রাখতে হয়?


Rownumberএটি কোনও পরিচয় কলাম নয়, এটি বাহ্যিক সিস্টেমের দ্বারা উত্পাদিত কোনও আন্ত (দুঃখের সাথে)। এটি প্রতিটি শুরুতে পুনরায় সেট করে DataDate

উদাহরণ ডেটা

RowNumber | DataDate | a | b | c..... 
   1      |2013-08-01| x | y | z 
   2      |2013-08-01| x | y | z 
...
   1      |2013-08-02| x | y | z 
   2      |2013-08-02| x | y | z 
...

তথ্য RowNumberক্রমে লোড হচ্ছে , DataDateপ্রতি লোড এক ।

আমদানি প্রক্রিয়াটি হ'ল বিসিপি - আমি একটি টেম্প টেবিলের উপর লোড করার চেষ্টা করেছি এবং তারপরে সেখান থেকে ক্রমটি নির্বাচন করেছি ( ORDER BY RowNumber, DataDate) তবে এখনও উচ্চ ভাঙ্গন বেরিয়ে আসে।

উত্তর:


50

কোনও পিকে সূচীতে কলামগুলির ক্রমের বিষয়টি বিবেচনা করে?

হ্যাঁ এটা করে.

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

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

একটি ক্লাস্টার্ড প্রাথমিক কী সহ (RowNumber, DataDate), সারিগুলি প্রথমে প্রথমে RowNumberএবং তারপরে যুক্ত করা হয় DataDate- সুতরাং সমস্ত সারি যেখানে RowNumber = 1লজিক্যালভাবে একসাথে বিভক্ত হয়, তারপরে সারিগুলি যেখানে থাকে RowNumber = 2ইত্যাদি।

যখন আপনি নতুন ডেটা যুক্ত করবেন ( RowNumbers1 থেকে n পর্যন্ত) নতুন সারিগুলি লজিকভাবে বিদ্যমান পৃষ্ঠাগুলির অভ্যন্তরে অন্তর্ভুক্ত, সুতরাং এসকিউএল সার্ভারকে সম্ভবত জায়গা তৈরি করতে অনেকগুলি কাজের বিভাজক পৃষ্ঠা করতে হবে। এই সমস্ত ক্রিয়াকলাপ কোনও লাভের জন্য প্রচুর অতিরিক্ত কাজ (পরিবর্তনগুলি লগ ইন সহ) উত্পন্ন করে।

স্প্লিট পৃষ্ঠাগুলিও প্রায় 50% খালি শুরু করে, অতএব অতিরিক্ত বিভক্তির ফলে কম পৃষ্ঠার ঘনত্বও হতে পারে (প্রতি পৃষ্ঠায় অনুকূলের চেয়ে কম সারি)) কেবলমাত্র ডিস্ক থেকে পড়ার জন্য এই খারাপ সংবাদই নয় (নিম্ন ঘনত্ব = আরও পৃষ্ঠাগুলি পড়তে হবে), নিম্ন-ঘনত্বের পৃষ্ঠাগুলি যখন ক্যাশে থাকে তখন মেমরিতে আরও জায়গা নেয় take

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

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

যখন নতুন ডেটা আমদানি করার সময় bcpআপনি উচ্চতর পারফরম্যান্স পেতে পারেন যদি আমদানি ফাইলের মধ্যে থাকা ডেটা ক্লাস্টারড ইনডেক্স কী (আদর্শভাবে (DataDate, RowNumber) দ্বারা সাজানো হয় এবং আপনি bcpবিকল্পটি নির্দিষ্ট করে থাকেন :

-h "ORDER(DataDate,RowNumber), TABLOCK"

সেরা ডেটা লোডিং পারফরম্যান্সের জন্য, আপনি নূন্যতম-লগ ইনড্রেস্টগুলি অর্জন করার চেষ্টা করতে পারেন। আরও তথ্যের জন্য, দেখুন:


4
একটি দুর্দান্ত উত্তর - আমি এখন জানি যে আমার কী করা উচিত এবং কেন। আমি ভেবে দেখেছি, তবে জানি না! ধন্যবাদ.
ব্লুচিপ্পি

পরীক্ষার জন্য আমার স্থানীয় এসকিউএল সার্ভারে ডিবি নেওয়ার সময় একটি খুব সুন্দর সময় নিয়েছে: পরিবর্তনের আগে সূচী লোডটি 45 মিনিট সময় নেয় ... তারপরে এটি লেগেছিল মাত্র 5 টি !!!
ব্লুচিপ্পি

13

হ্যাঁ, আদেশটি সমালোচনাযোগ্য। আমি আপনি রাউনম্বার (উদাঃ WHERE RowNumber=1) এর দ্বারা জিজ্ঞাসাবাদ সম্পর্কে অত্যন্ত সন্দেহ । অবিশ্বাস্যভাবে সময় সিরিজ তারিখ দ্বারা WHERE DataDate BEWEEN @start AND @endকোয়েরি করা হয় ( ) এবং এই জাতীয় প্রশ্নের দ্বারা একটি ক্লাস্টার্ড সংগঠনের প্রয়োজন হবে DataDate

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


আমার ডেটাডেটে একটি ক্লাস্টারবিহীন সূচক (এস) রয়েছে, যা আপনি বলছেন প্রায়শই WHEREপ্রশ্নগুলিতে ক্লজ হয়ে থাকে।
ব্লু চিপ্পি

1
যদি কলামগুলির অর্ডার সমালোচনা করে থাকে, তাহলে কী ভুল আদেশের প্রভাবটি আমার আই / ও বৃদ্ধি পাবে? আমার ধারণা হ'ল এটি রওনবার দ্বারা অর্ডার করা হচ্ছে এবং তাই প্রতিবার সূচীতে প্রচুর কাজ করতে হবে, যেখানে এটি ডেটাডেটের ভিত্তিতে হওয়া উচিত?
ব্লু চিপ্পি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.