কোন প্রাথমিক কী সহ টেবিল

আমার কয়েকটি টেবিলের আছে যার অনন্য ডেটাটি একটি অনন্য পরিচয় (একটি গুগ) কলাম। কারন গুডস অ-ক্রান্তীয় (এবং তারা ক্লায়েন্ট-সাইড তৈরিতে আছে তাই আমি নতুনবর্ষীয়() ব্যবহার করতে পারি না), আমি এই ID ক্ষেত্রের উপর একটি অ-প্রাথমিক, অ-ক্লাস্টারড ইনডেক্স তৈরি করেছি, সারণি প্রদানের পরিবর্তে একটি ক্লাস্টার প্রাইমারী চাবি.

আমি এই পদ্ধতির জন্য কর্মক্ষমতা প্রভাব কি ভাবছি করছি আমি কিছু লোককে দেখেছি যে টেবিলের একটি স্বতঃবৃদ্ধি ("পরিচয়") int একটি ক্লাস্টারযুক্ত প্রাথমিক কী হিসাবে থাকা উচিত যদিও এটি কোনো অর্থ নাও আছে, কারণ এর মানে হল ডাটাবেস ইঞ্জিনটি যে মানটি দ্রুত ব্যবহার করতে পারে একটি বুকমার্ক ব্যবহার করার পরিবর্তে একটি সারি সন্ধান

আমার ডাটাবেস একটি গুচ্ছ সার্ভার জুড়ে একত্রিত করা হয়, তাই আমি পরিচয় int কলাম থেকে shied করেছি হিসাবে তারা প্রতিলিপি অধিকার পেতে একটি বিট লোমশ হয়।

আপনার চিন্তা কি? টেবিল প্রাথমিক কী আছে? অথবা ঠিক আছে যদি কোন ক্লাস্টার ইনডেক্স না থাকে তবে সূচকের কোন উপযুক্ত কলাম নেই?

0
ro fr hi
যেহেতু আপনি প্রতিলিপি করছেন, তাই আপনার সঠিক পরিচয়পত্রগুলি স্পষ্টভাবে পরিষ্কার করতে হবে। আমি আপনার GUID একটি প্রাথমিক কী করতে হবে কিন্তু আপনি আপনার নতুন ব্যবহার করতে পারবেন না কারণ nonclustered। যে আমাকে আপনার সেরা কোর্স হিসাবে stikes। যদি আপনি এটি একটি PK না কিন্তু এটি একটি অনন্য সূচী করা না, তাড়াতাড়ি বা পরে যে FK সম্পর্ক বুঝতে না সিস্টেম বজায় যারা সঠিকভাবে বাগ পরিচয় করিয়ে দিতে পারে।
যোগ লেখক HLGEM, উৎস

7 উত্তর

প্রাথমিক কী তিনটি উদ্দেশ্যে কাজ করে:

  • ইঙ্গিত করে যে কলাম (গুলি) অনন্য হবে
  • ইঙ্গিত দেয় যে কলাম (গুলি) অ-নল হওয়া উচিত
  • অভিপ্রায় নথিভুক্ত করুন যে এই সারির অনন্য শনাক্তকারী

প্রথম দুইটি অনেকগুলি উপায়ে নির্দিষ্ট করা যেতে পারে, যেমন আপনি ইতিমধ্যেই করেছেন।

তৃতীয় কারণটি ভাল:

  • মানুষের জন্য, যাতে তারা সহজেই আপনার অভিপ্রায় দেখতে পারে
  • কম্পিউটারের জন্য, এমন একটি প্রোগ্রাম যা তুলনা করতে পারে বা অন্যথায় আপনার টেবিলের প্রক্রিয়াটি টেবিলের প্রাথমিক কীের জন্য ডাটাবেস অনুসন্ধান করতে পারে।

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

0
যোগ
@MattHamilton পুনরায় "... একটি প্রাথমিক কী হিসাবে একটি গাইড কলাম থাকা ভাল ধারণা নয়, কারণ প্রাথমিক কীগুলি ক্লাস্টারযুক্ত এবং গুডস র্যান্ডম" এটিকে অতিক্রম করতে, আপনি SQL 2005/2008 এ "newsequentialid ()" ফাংশন ব্যবহার করতে পারেন সম্পাদনা: প্রয়োজনীয় কোডিং হরর পোস্ট পাওয়া যায় যা এই বিষয়ে কথা ;-)
যোগ লেখক Leon Bambrick, উৎস
এটি একটি প্রাথমিক ধারণা হিসাবে গড কলামের জন্য অবশ্যই একটি ভাল ধারণা নয়, কারণ প্রাথমিক কীগুলি ক্লাস্টার এবং গড র্যান্ডম। এর মানে হল যে আপনি একটি নতুন সারি সন্নিবেশ করান আপনার টেবিলের মূলত ডিস্কের উপর পুনর্গঠন করা হচ্ছে। মানুষ সাধারণত পরামর্শ দেয় যে প্রাথমিক কীগুলি ক্রমানুসারে, ক্রমবর্ধমান প্রকারের হওয়া উচিত যাতে প্রতিটি নতুন সারির টেবিলে শেষ হয়ে যায়।
যোগ লেখক Matt Hamilton, উৎস
একটি প্রাথমিক কী ডিফল্টভাবে একটি ক্লাস্টার্ড ইনডেক্স দ্বারা সমর্থিত কিন্তু এটি অপসারণ করা যেতে পারে (ক্লাস্টার ইনডেক্স)।
যোগ লেখক Andrei Rînea, উৎস

একটি প্রাথমিক কী একটি autoincrementing ক্ষেত্রের প্রয়োজন হয় না, অনেক ক্ষেত্রে এটি শুধু আপনার টেবিলের গঠন জালিয়াতি করা মানে।

পরিবর্তে, একটি প্রাথমিক কীটি অ্যাট্রিবিউটগুলির সর্বনিম্ন সংগ্রহ হওয়া উচিত (উল্লেখ্য যে অধিকাংশ ডিবিএমএস একটি যৌথ প্রাইমারী কী অনুমোদন করবে) যা একটি স্বল্পদৈর্ঘ্য একটি টিপল সনাক্ত করে।

কারিগরি পদে, এটি ক্ষেত্র হতে হবে যে টিপলে প্রতিটি ক্ষেত্রটি পুরোপুরি কার্যকরীভাবে নির্ভরশীল। (যদি না হয় তাহলে আপনাকে স্বাভাবিকের দিকে যেতে হবে)।

অনুশীলনের মধ্যে, পারফরম্যান্সের বিষয়গুলি বোঝাতে পারে যে আপনি টেবিলগুলিকে একত্রীকরণ করেন এবং একটি বাড়ানো ক্ষেত্র ব্যবহার করুন, কিন্তু আমি মনে করি যে অপ্রত্যাশিত অপ্টিমাইজেশন সম্পর্কে খারাপ কিছু বলা হচ্ছে ...

0
যোগ

আমি সবসময় সবসময় স্বয়ংক্রিয়ভাবে বৃদ্ধি কর্ম সঞ্চালনের জন্য ভাল আছে শুনেছেন এমনকি যদি আপনি এটি আসলে ব্যবহার না করে।

0
যোগ

যেহেতু আপনি প্রতিলিপি করছেন, তাই আপনার সঠিক পরিচয়পত্রগুলি স্পষ্টভাবে পরিষ্কার করতে হবে। আমি আপনার GUID একটি প্রাথমিক কী করতে হবে কিন্তু আপনি আপনার নতুন ব্যবহার করতে পারবেন না কারণ nonclustered। যে আমাকে আপনার সেরা কোর্স হিসাবে stikes। যদি আপনি এটি একটি PK না কিন্তু এটি একটি অনন্য সূচী করা না, তাড়াতাড়ি বা পরে যে FK সম্পর্ক বুঝতে না সিস্টেম বজায় যারা সঠিকভাবে বাগ পরিচয় করিয়ে দিতে পারে।

0
যোগ

শুধু জাম্পিং, কারণ ম্যাট এর একটি বিট আমাকে baited

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

একটি সিআইসি ছাড়া একটি টেবিল কেবল একটি হ্যাপ। একটি PK ছাড়া একটি টেবিল প্রায়ই "একটি টেবিল নয়" বলে মনে করা হয়। পি কে এবং সিআইএস ধারণাগুলি উভয়কেই আলাদাভাবে বোঝার জন্য এটি সর্বোত্তম। যাতে আপনি ডাটাবেস ডিজাইনে সিদ্ধান্ত নিতে পারেন।

হরণ করা

0
যোগ

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

0
যোগ
প্রকৃতপক্ষে এটি ভুল - কিম্বারলি ট্রিপ (ইন্ডিয়ানের রানী) স্পষ্টভাবে দেখায়: একটি ভাল ক্লাস্টার ইনডেক্স হচ্ছে INSERT পারফরম্যান্সের বৃদ্ধি হবে! sqlskills.com/BLOGS/KIMBERLY/post/…
যোগ লেখক marc_s, উৎস
আমি যে স্পষ্টতই দেখাচ্ছে না তা বলবো না :) তিনি সাধারণ অনুশীলনের কথা বলছেন, তার বক্তব্যকে সমর্থন করেন না, ভাল, কিছু, যখন আমি একটি খুব নির্দিষ্ট দৃশ্যকল্প সম্পর্কে কথা বলছি যা আমার অভ্যাসের মধ্যে ঘটেছে: সম্ভাব্য মিলিয়ন মিলিয়ন রেকর্ডের একটি অ খালি টেবিলের মধ্যে বাল্ক-সন্নিবেশ, যা তারপর আপডেট করা হয় না একটি র্যান্ডম-পড়া মোডে অ্যাক্সেস কিন্তু শুধুমাত্র তার সম্পূর্ণরূপে স্ক্যান আমি অনুমান করি যে ইন্ডাকশনগুলির তুলনায় খেলাটিতে আরো কিছু কারণ থাকতে পারে। সবসময় আপনার অপ্টিমাইজেশান শিশুদের পরীক্ষা
যোগ লেখক zvolkov, উৎস

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

GUID বনাম আইডি আর্গুমেন্ট জন্য হিসাবে, আপনি অনলাইন দ্বারা অনলাইন যারা অনলাইন উভয় শপথ করতে পারেন। আমি সর্বদা গিগাবাইট ব্যবহার করা শেখানো হয় না যদি না সত্যিই একটি ভাল কারণ আছে কারণ না। জেফ একটি ভাল পোস্ট আছে যা GUID ব্যবহার করার কারণগুলি সম্পর্কে আলোচনা করে: http: //www.codinghorror .com / ব্লগ / আর্কাইভ / 000817.html

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

[সম্পাদনা] @ ম্যাট, GUID / আইডি বিতর্কের উপর আরো কিছু গবেষণা করার পরে আমি এই পোস্টে এসেছিলাম। আমি আগে যেমন উল্লিখিত, একটি সত্য সঠিক বা ভুল উত্তর নেই এটি আপনার নির্দিষ্ট বাস্তবায়ন প্রয়োজনের উপর নির্ভর করে। কিন্তু প্রাথমিক কী হিসাবে GUID ব্যবহার করতে কিছুটা কার্যকর কারণ:

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

     

এছাড়াও, কারণ সন্নিবেশগুলি এলোমেলোভাবে বিতরণ করা হয়, পৃষ্ঠার বিভাজনের সুযোগ ব্যাপকভাবে কমে যায়। একটি পৃষ্ঠা এখানে বিভক্ত এবং খুব খারাপ না হয়, প্রভাবগুলি দ্রুত যোগ করুন পরিচয়পত্রের সাথে, পৃষ্ঠাটি ফ্যাক্টরটি একটি টিউনিং প্রক্রিয়া হিসাবে সুন্দরভাবে বেহুদা এবং 100% পর্যন্ত সেট করা হতে পারে - সারিগুলি কোনো পৃষ্ঠাতে কখনই ঢোকানো হবে না কিন্তু শেষের একটি NewID() দিয়ে, আপনি আসলে একটি কার্য সম্পাদন সক্ষম সরঞ্জাম হিসাবে পূরণ ভ্যাক্টর ব্যবহার করতে পারেন। আপনি একটি ফাঁক ফ্যাক্টর সেট করতে পারেন একটি স্তর যা সূচক পুনর্নির্মাণের মধ্যে আনুমানিক ভলিউম বৃদ্ধির আনুমানিক হিসাব করে, এবং তারপর dbcc reindex ব্যবহার করে অফ-পিক ঘন্টাগুলির সময় পুনঃনির্ধারণ করে। এটি অফ-পিকের সময় পর্যন্ত পৃষ্ঠার বিভাজনগুলির পারফরম্যান্স হিটগুলিকে কার্যকরীভাবে বিলম্ব করে।

     

যদি আপনি মনে করেন আপনাকে প্রশ্নে টেবিলের জন্য প্রতিলিপি সক্রিয় করতে হতে পারে - তাহলে আপনি PK কে একটি অনন্য পরিচিতকারী হিসাবেও তৈরি করতে পারেন এবং GUID ক্ষেত্রটিকে ROWGUIDCOL হিসাবে পতাকাঙ্কিত করতে পারেন। প্রতিলিপিটি এই বৈশিষ্ট্যের সাথে একটি স্বতন্ত্র মূল্যবান গুহার ক্ষেত্রের প্রয়োজন হবে, এবং যদি কেউ অস্তিত্ব না পায় তবে এটি যোগ করবে। যদি একটি উপযুক্ত ক্ষেত্র বিদ্যমান থাকে, তবে এটি এমন একটিকেই ব্যবহার করবে।

     

তবে পি কেগুলির জন্য GUID ব্যবহার করার অন্য এক বিশাল সুবিধা হল যে সত্যটি নিশ্চিতভাবে নিশ্চিত করা যায় অনন্য - শুধুমাত্র এই সার্ভার দ্বারা উত্পন্ন সমস্ত মানগুলির মধ্যে নয়, তবে সব কম্পিউটার - এটি আপনার ডিবি সার্ভার, ওয়েব সার্ভার, অ্যাপ্লিকেশন সার্ভার, অথবা ক্লায়েন্ট মেশিন কিনা। বেশিরভাগ প্রত্যেক আধুনিক ভাষাতে এখন একটি বৈধ গাইড তৈরির সামর্থ আছে - আপনি .NET ব্যবহার করতে পারেন System.Guid.NewGuid। বিশেষভাবে ক্যাশেড মাস্টার-বিশদ ডেটাসেটগুলির সাথে এটির আচরণ করার সময় এটি খুবই কার্যকরী। আপনি প্রতিশ্রুতিবদ্ধ আগে একসঙ্গে আপনার রেকর্ড একীভূত করার জন্য উন্মত্ত অস্থায়ী কিপিং স্কিম নিয়োগ করতে হবে না। রেকর্ড তৈরির সময় আপনি প্রতিটি নতুন রেকর্ডের স্থায়ী কী মানের জন্য অপারেটিং সিস্টেম থেকে পুরোপুরি একটি বৈধ নতুন গাইড গ্রহন করুন। ?

     

http://forums.asp.net/t/264350.aspx < ; / p &>

0
যোগ
আকর্ষনীয়। পারফরম্যান্স একটি বিষয় হয়ে ওঠে যদি আমি "পৃষ্ঠা বিভাজক এবং সূচক পুনর্নির্মাণ" বিকল্পটি দেখতে হবে তার জন্য ধন্যবাদ.
যোগ লেখক Matt Hamilton, উৎস
Kimberly Tripp এর গিগাবাইট হিসাবে প্রাথমিক হিসাবে পড়ুন এবং / অথবা ক্লাস্টারিং কী এবং ডিস্ক স্থান সস্তা - যে না বিন্দু! এবং তার অনেক চমৎকার ব্লগ পোস্টগুলি - সে স্পষ্টভাবে দেখায় যে GUID- এ একটি ক্লাস্টারিং কী কলাম হয় এছাড়াও - হটস্পটগুলি একটি কল্পকাহিনী যা দীর্ঘদিনের দুর্ভাগ্যজনক - এসকিউএল সার্ভার 6.5 এর পরে আর কোনও সমস্যা হয় না ....
যোগ লেখক marc_s, উৎস