একটি অনন্য বাধা ক্ষেত্রগুলিতে স্বয়ংক্রিয়ভাবে একটি INDEX তৈরি করে?


99

আমি কি কলামে পৃথক সূচকটি নির্ধারণ করব email(অনুসন্ধানের উদ্দেশ্যে), বা UNIQ_EMAIL_USERসীমাবদ্ধতার সাথে সূচকটি "স্বয়ংক্রিয়ভাবে" যুক্ত করা হবে ?

CREATE TABLE IF NOT EXISTS `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `first` varchar(255) NOT NULL,
  `last` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_SLUG` (`slug`),
  UNIQUE KEY `UNIQ_EMAIL_USER` (`email`,`user_id`),
  KEY `IDX_USER` (`user_id`)
) ENGINE=InnoDB;

সম্পাদনা : কর্বিন i এর পরামর্শ অনুসারে EXPLAIN SELECT * FROM customer WHERE email = 'address'খালি টেবিলে জিজ্ঞাসা করেছিলেন । এটি ফলাফল, আমি এটি ব্যাখ্যা করতে জানি না:

id select_type type possible_keys key  key_len ref  rows Extra
1  SIMPLE      ALL  NULL          NULL NULL    NULL 1    Using where

টেবিলে একটি IXD_EMAIL যুক্ত করার সময় একই কোয়েরিটি দেখায়:

id select_type type possible_keys key       key_len ref   rows Extra
1  SIMPLE      ref  IDX_EMAIL     IDX_EMAIL 257     const 1    Using where

4
একটি অনন্য সীমাবদ্ধতার জন্য প্রযুক্তিগতভাবে কোনও সূচক প্রয়োজন হয় না ... তবে মানক কীভাবে এটি নির্ধারণ করে বা মাইএসকিউএল (কোন ব্যাকএন্ড, বিটিডাব্লু?) এটি প্রয়োগ করে তা নিশ্চিত নয়। মাইএসকিউএলটিতে ম্যানুয়ালি যা আমি খুঁজে পেতে পারি তা হ'ল "একটি অনন্য সূচকটি এমন একটি প্রতিবন্ধকতা তৈরি করে যে সূচীর সমস্ত মান অবশ্যই আলাদা be"

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

4
আমি 99% নিশ্চিত যে এটি সত্যিই একটি সূচক তৈরি করে। কেবল একটি অনন্যের সাথে একটি টেবিল তৈরি করুন তারপরে কোনও নির্বাচনের ক্ষেত্রে একটি ব্যাখ্যা দিয়ে করুন।
কর্বিন

@ কর্বিন এটি করেছে, ফলাফলটিকে আমি কীভাবে ব্যাখ্যা করব?
গ্রিমো

এটি কি সূচক হিসাবে অনন্য বাধা ব্যবহার করেছিল? আপনাকে উপায় দ্বারা একটি উল্লেখযোগ্যভাবে বড় টেবিল ব্যবহার করতে হতে পারে, বা এটি কেবল একটি টেবিল স্ক্যান করতে পারে।
কর্বিন

উত্তর:


116

একজন অনন্য কী সূচক একটি বিশেষ মামলা, স্বতন্ত্রতা জন্য যোগ পরীক্ষণ সঙ্গে একটি নিয়মিত সূচক মত অভিনয় করা হয়। SHOW INDEXES FROM customerআপনি ব্যবহার করে দেখতে পারেন আপনার অনন্য কীগুলি আসলে বি-ট্রি প্রকারের সূচক।

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

সূচক ব্যবহারের পরীক্ষার জন্য আপনাকে প্রথমে আপনার টেবিলটি কিছু ডেটা দিয়ে পূরণ করতে হবে যাতে অপ্টিমাইজারটি মনে করে যে এই সূচকটি ব্যবহার করা আসলেই উপযুক্ত।


তাহলে EXPLAINপরীক্ষা খালি টেবিলের কারণে মিথ্যা মানগুলি দেখায়?
গ্রেমো

আমি নিশ্চিত নই যে আপনি কীভাবে সেই ব্যাখ্যা ফলাফলটি অর্জন করতে পেরেছিলেন, আমি কেবল আপনার টেবিলের সংজ্ঞাটি অনুলিপি করেছি এবং একই ব্যাখ্যা ইউএনআইকিউ_ই-ই-মেইল_ ইউএসকে সম্ভাব্য কী হিসাবে দেখায়, আপনি কি দয়া করে এটি পরীক্ষা করতে পারেন?
পাইওটর্ম

ঠিক আছে, কৌশলটি খুঁজে পেয়েছি। সীমাবদ্ধতাটি user_idপ্রথম ব্যবহার করে সংজ্ঞায়িত করা হয় এবং তারপরে emailএটি প্রদর্শিত হয় না EXPLAIN। আপনি কি এই সম্পর্কে সচেতন?
গ্রেম

12
এটি কাজ করে না কারণ ইমেল (ইউজার_আইডি, ইমেল) জুটির বামতম অংশ নয়। আপনি কেবল ডান অংশ ব্যবহার করে আপনার সারিটি সন্ধান করতে খ-গাছের নীচে যেতে পারবেন না।
পিয়টর্ম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.