লাইক কীভাবে প্রয়োগ করা হয়?


22

বর্তমানের ডাটাবেস সিস্টেমে কীভাবে LIKE অপারেটর প্রয়োগ করা হয় (উদাহরণস্বরূপ মাইএসকিউএল বা পোস্টগ্রিস) কেউ ব্যাখ্যা করতে পারবেন? বা আমাকে এমন কিছু রেফারেন্স দেখায় যা এটি ব্যাখ্যা করে?

নিখরচু পদ্ধতিটি হ'ল প্রতিটি রেকর্ড পরিদর্শন করা, আগ্রহের ক্ষেত্রে নিয়মিত অভিব্যক্তি বা আংশিক স্ট্রিং ম্যাচটি সম্পাদন করা, তবে আমার একটি অনুভূতি (আশা) আছে যে এই সিস্টেমগুলি আরও স্মার্ট কিছু করে।

উত্তর:


19

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

SELECT *
  FROM employees
 WHERE last_name LIKE 'Cav%'

LAST_NAMEশেষ নামটি 'ক্যাভ' শুরু হয় এমন সমস্ত সারি সন্ধান করতে ডাটাবেস সূচকটি ব্যবহার করতে পারে । অন্যদিকে, যদি আপনি কিছু ছিল

SELECT *
  FROM employees
 WHERE last_name LIKE '%av%'

ডাটাবেসটিকে পুরো টেবিলটি (বা সম্পূর্ণ সূচক) স্ক্যান করতে হবে এবং পূর্ণ LAST_NAMEমানটির বিপরীতে অভিব্যক্তিটি মূল্যায়ন করতে হবে । স্পষ্টতই, এটি খুব ব্যয়বহুল।

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


4
ওরাকল এমনকি শীর্ষস্থানীয় শতাংশের সাথে একটি সূচক ব্যবহার করতে পারে। যদি অনুসন্ধান করা ডেটাগুলি সারিগুলির একটি ছোট উপসেট উপস্থাপন করে তবে ইঙ্গিতটি এটিকে একটি সূচক ব্যবহার করতে এবং প্রয়োগ দ্রুততর করতে বাধ্য করতে পারে। Laurentschneider.com/wordpress/2009/07/… দেখুন ।
লেফ রিফেল

1
"পুরো টেবিলটি স্ক্যান করুন ... স্পষ্টতই, এটি খুব ব্যয়বহুল" - এটি বরং টেবিলের উপর নির্ভর করে;) পিএস আপনি কি LAST_NAMEক্লাস্টারড ইনডেক্সের (প্রথম কলামে) প্রার্থী হতে সম্মত হন ? পিপিএস এই উত্তরটি কী পরিমাণে ধরে নিয়েছে যে ডেটাবেস সিস্টেমটি ডিস্ক এবং বি-ট্রি সূচকগুলিতে সংগৃহীত স্টোরেজের উপর ভিত্তি করে?
onedaywhen

26

জাস্টিন গুহ যা লিখেছিল তা ছাড়াও পোস্টগ্র্রেএসকিউএল 9.1-এর পরে আপনি ( ) বা ( ) এবং যে কোনও বেসিক নিয়মিত এক্সপ্রেশন মেলে খুব সহজেই ( ) এর সাথে যে কোনও অনুসন্ধানকে গতি দিতে পারবেন । বাম-অ্যাঙ্কার্ড নয় এমন এক্সপ্রেশনগুলিকে গতি বাড়ানোর জন্য একটি জিআইএন বা জিআইএসটি সূচক সহ মডিউল pg_trgm দ্বারা সরবরাহ করা অপারেটর ক্লাসগুলি ব্যবহার করুন । এক্সটেনশনটি ইনস্টল করতে, প্রতি ডাটাবেস একবার চালান:LIKE~~ILIKE~~*~LIKE

CREATE EXTENSION pg_trgm;

ফর্মের একটি সূচক তৈরি করুন

CREATE INDEX tbl_col_gin_trgm_idx ON tbl USING gin (col gin_trgm_ops);

বা:

CREATE INDEX tbl_col_gist_trgm_idx ON tbl USING gist (col gist_trgm_ops);

একটি জিআইএন বা জিআইএসটি সূচক তৈরি এবং রক্ষণাবেক্ষণের জন্য একটি ব্যয় বহন করা হয়, তবে যদি আপনার টেবিলটি ভারীভাবে লেখা না হয় তবে এটি আপনার জন্য দুর্দান্ত বৈশিষ্ট্য।

নতুন ফিচার সম্পর্কে দেপেস তার ব্লগে একটি দুর্দান্ত নিবন্ধ লিখেছেন ।

জিন বা জিআইএসটি?

ম্যানুয়ালটির এই দুটি উদ্ধৃতিগুলির কিছু দিকনির্দেশনা দেওয়া উচিত

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

তবে দূরবর্তী অপারেটরটি ব্যবহার করে "নিকটতম প্রতিবেশী" ধরণের প্রশ্নের জন্য <->:

এটি জিআইএসটি সূচকগুলি দ্বারা কার্যকরভাবে কার্যকর করা যেতে পারে তবে জিআইএন সূচকগুলি দ্বারা নয়।


3
এটি পড়ে আমি ভাবলাম জিআইএন বা জিআইএসটি ব্যবহার করব কিনা। আমি যা পড়েছি তা অনুসারে, জিআইএন সূচকগুলি বজায় রাখা আরও ব্যয়বহুল তবে অনুসন্ধানে তত দ্রুত, যখন একটি জিআইএসটি সূচক বজায় রাখতে সস্তা তবে অনুসন্ধানে ধীর। এর অর্থ জিআইএন সূচকগুলি সাধারণত তুলনামূলকভাবে স্থিতিশীল ডেটাতে ব্যবহার করা উচিত যখন জিআইএসটি সূচকগুলি আরও বেশি ভারী পরিবর্তনীয় টেবিলগুলিতে পছন্দ করা হয়।
কলিন 't হার্ট

1
@ কলিনহার্ট: এটি সাধারণত সত্য তবে নিয়মের ব্যতিক্রমও রয়েছে। উপরে সংযোজন বিবেচনা করুন।
এরউইন ব্র্যান্ডসটেটার

5

মাইএসকিউএল সম্পর্কে কথা বলতে বলতে, ওয়াইল্ড-কার্ড চরিত্রের অবস্থান (%) একটি পার্থক্য করে। যদি পাঠ্যের প্রথম অংশটির মতো নির্দিষ্ট করা হয় where first_name like 'Sta%', তবে ডিবি ইঞ্জিন এস এর সাথে স্টার করা, তারপরে সেন্ট, এবং তারপরে স্টা ইত্যাদি শব্দগুলির কেবলমাত্র একটি ছোট উপসেট সন্ধান করবে যদি আপনি কিছু পছন্দ করেন where first_name like '%stan%'তবে এর সম্পূর্ণ স্ক্যান করুন scan কলামের প্রয়োজন হবে। আপনি পূর্ণ-পাঠ্য সূচীগুলিতেও নজর রাখতে পারেন যা প্রাকৃতিক ভাষা অনুসন্ধানও করে। এখানে মাইএসকিউএল ডক্স পরীক্ষা করে দেখুন।


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