এসকিউএলাইটে একটি প্রাথমিক কীটির জন্য একটি সূচক প্রয়োজন?


130

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

স্ট্রিং প্রাথমিক কীটির জন্য পরিস্থিতি কি অন্যরকম হবে?

উত্তর:


148

এটি আপনার জন্য এটি করে।

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


8
প্রকৃতপক্ষে, এটি বলে যে "প্রাথমিক কী গুণাবলী সাধারনত কলাম বা কলামগুলিতে একটি অনন্য সূচক তৈরি করে যা প্রাইমারি কী হিসাবে নির্দিষ্ট করা হয়"। তবে, এই সূচকটি এসকিউএল পরিচালন অ্যাপ্লিকেশনগুলিতে দৃশ্যমান নয়, এজন্যই আমি জিজ্ঞাসা করেছি।
মারেক জেদলিস্কি

1
এটি sqlite_masterটেবিলে একটি নাম দিয়ে শুরু করে উল্লেখ করা আছে sqlite_autoindex_
dan04

2
দেরীতে, তবে @ নিকোলাসজোজল হ্যাঁ আপনার পিতামাত / রেফারেন্সযুক্ত ক্ষেত্র (গুলি) -এ উপস্থিত না থাকলে যদি আপনার একটি সূচক (বা সীমাবদ্ধতা) তৈরি করা প্রয়োজন ; এটি সুপারিশ করা হয় যে শিশু / রেফারেন্সিং UNIQUEUNIQUE
ফিল্ডগুলির

2
হুম, বিভাগটি SQL Data Constraints এখানে বলেছে: বেশিরভাগ ক্ষেত্রে , অনন্য এবং প্রাথমিক মূল সীমাবদ্ধতাগুলি ডাটাবেসে একটি অনন্য সূচক তৈরি করে প্রয়োগ করা হয়। (ব্যতিক্রমগুলি রাউবিড টেবিল ছাড়া স্বতন্ত্র প্রাথমিক কী এবং প্রাথমিক কীগুলি রয়েছে))। তাহলে উত্তর কি সবসময় সত্য হয় না?
খেলাধুলা কৌতূহল

3
মনে হচ্ছে rowid মত সূচীবদ্ধ করা হয় কিন্তু ভিন্নভাবে বাস্তবায়িত sqlite.org/lang_createtable.html#rowid rowid টেবিলের সেই ডেটা প্রতিটি টেবিলের সারিতে একটি এন্ট্রি সম্বলিত একটি বি-ট্রী কাঠামো যেমন সংরক্ষণ করা হয়, যেমন চাবি ... অনুসন্ধানের rowid মান ব্যবহার নির্দিষ্ট রোউইড সহ একটি রেকর্ডের জন্য ... অন্য যে কোনও প্রাথমিক কী বা সূচকযুক্ত মান নির্দিষ্ট করে তৈরি একই ধরণের অনুসন্ধানের চেয়ে দ্বিগুণ দ্রুত।
ম্যাটরেশকিন

15

যদি কোনও কলামটি প্রাইমারী মূল কী হিসাবে চিহ্নিত হয়, তবে এটি অন্য যে কোনও প্রাথমিক কী বা সূচকযুক্ত মান নির্দিষ্ট করে সন্ধানের তুলনায় প্রায় দ্বিগুণ দ্রুত । এই কারণ:

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

নীচে উল্লিখিত একটি ব্যতিক্রম সহ, যদি একটি রোুইড টেবিলের একটি প্রাথমিক কী থাকে যা একটি একক কলাম ধারণ করে এবং সেই কলামের ঘোষিত প্রকারটি "INTEGER" হয় তবে উপরের এবং নীচের ক্ষেত্রে যে কোনও মিশ্রণ থাকে, তাহলে কলামটি রোউইডের জন্য একটি উপ নাম হয়ে যায়।

এই জাতীয় কলামটি সাধারণত "পূর্ণসংখ্যার প্রাথমিক কী" হিসাবে পরিচিত। একটি প্রাথমিক কী কলামটি কেবলমাত্র পূর্ণসংখ্যার প্রাথমিক কী হয়ে যায় যদি ঘোষিত প্রকারের নামটি ঠিক "INTEGER" হয়। "INT" বা "BIGINT" বা "SHORT INTEGER" বা "UNSIGNED INTEGER" এর মতো অন্যান্য পূর্ণসংখ্যার টাইপের নামগুলির কারণে প্রাথমিক কী কলামটি পূর্ণ সারণী এবং একটি অনন্য সূচীর সাথে একটি সাধারণ টেবিল কলাম হিসাবে আচরণ করে, সারিটির জন্য একটি উপাধ হিসাবে নয়।

দেখুন: http://www.sqlite.org/lang_createtable.html#rowid


8

একটি ডাটাবেস সর্বদা নিঃশব্দে একটি অনন্য প্রাথমিক কীটির জন্য একটি সূচক তৈরি করবে যাতে এটি অভ্যন্তরীণভাবে পরীক্ষা করতে পারে যে এটি দক্ষতার সাথে অনন্য।

এটি তৈরি করার পরে, এটি যখন প্রয়োজন হবে তখন এটি ব্যবহার করবে।

এটি অবশ্যই সর্বদা ক্লাস্টার হবে না এবং আপনি যদি এটি চান তা আপনি সাধারণত স্কিমায় নির্দিষ্ট করেন।

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