মাইএসকিউএল সূচকগুলি - সেরা অনুশীলনগুলি কী কী?


208

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

মাইএসকিউএল সূচকের জন্য সেরা অনুশীলনগুলি কী কী?

পরিস্থিতি / সংশয়ের উদাহরণ:

  • যদি কোনও টেবিলের ছয়টি কলাম থাকে এবং সেগুলি সব অনুসন্ধানযোগ্য হয়, আমি কি তাদের সমস্তকেই সূচক করব বা সেগুলির কোনওটিই নয়?

  • সূচকের নেতিবাচক কর্মক্ষমতা প্রভাবগুলি কী কী?

  • আমার যদি কোনও V 25CHAR 2500 কলাম রয়েছে যা আমার সাইটের অংশগুলি থেকে অনুসন্ধানযোগ্য, আমি কি এটি সূচী করবো?


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


উত্তর:


242

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

বিস্তৃতভাবে বলতে গেলে, একটি সূচী একটি সারণির সারিগুলিতে একটি অর্ডার চাপিয়ে দেয়।

সরলতার জন্য, একটি টেবিলটি কেবল একটি বড় সিএসভি ফাইল imagine যখনই একটি সারি isোকানো হয়, এটি শেষে sertedোকানো হয় । সুতরাং সারণিটির "প্রাকৃতিক" ক্রমটি কেবল সারণি সন্নিবেশ করা হয়েছে।

কল্পনা করুন যে আপনি সিএসভি ফাইলটি খুব প্রারম্ভিক স্প্রেডশিট অ্যাপ্লিকেশনটিতে লোড করেছেন। এই সমস্ত স্প্রেডশিটটি হ'ল ডেটা প্রদর্শন করে এবং সারিগুলিকে ক্রমানুসারে ক্রম করে।

এখন কল্পনা করুন যে আপনার তৃতীয় কলামে "এম" এর কিছু মান রয়েছে এমন সমস্ত সারি সন্ধান করা উচিত। আপনার কাছে যা আছে তা দেওয়া, আপনার কাছে কেবল একটি বিকল্প রয়েছে। আপনি প্রতিটি সারির জন্য তৃতীয় কলামের মান পরীক্ষা করে টেবিলটি স্ক্যান করেন। যদি আপনি প্রচুর সারি পেয়ে থাকেন তবে এই পদ্ধতিটি (একটি "টেবিল স্ক্যান") অনেক বেশি সময় নিতে পারে!

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

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

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

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

অন্যদিকে, পাঠগুলি অনেক দ্রুত হয়ে যায়।

আশা করি এটি আপনার প্রথম দুটি প্রশ্নকে কভার করেছে (যেমন অন্যরা উত্তর দিয়েছেন - আপনাকে সঠিক ভারসাম্য খুঁজে বের করতে হবে)।

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

শেষ অবধি, আপনাকে একাধিক কলামে সূচিগুলি নিয়ে চিন্তা করতে হবে। ধারণাটি একই, এবং লাইক স্টাফের সাথে একইরকম আচরণ করে - মূলত, আপনার যদি একটি সূচক থাকে (ক, খ, সি), ইঞ্জিনটি বাম থেকে ডানদিকে সূচকটি যথাসম্ভব যথাযথভাবে ব্যবহার করা চালিয়ে যাবে। সুতরাং কলামে একটি অনুসন্ধান (a, b, c) সূচকটি (a, b) এর মতো ব্যবহার করতে পারে। তবে, আপনি কোথা থেকে b = 5 এবং c = 1 অনুসন্ধান করে থাকলে ইঞ্জিনটিকে একটি পূর্ণ টেবিল স্ক্যান করতে হবে)

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


10
FULLTEXTসূচকের কী হবে ? তারা কি এই জাতীয় পরিস্থিতিতে সাহায্য করতে পারে LIKE '%bar%'?
সেপ্টেম্বর

2
@ সেপ্টগ্রাম - যদি "শব্দ" হয় তবে সেই প্রশ্নের FULLTEXTসাথে সহায়তা করতে পারে । শব্দগুলি পরিচালনা করে, নির্বিচারে সাবস্ট্রিংগুলি নয় (যেমনটি করে)। barFULLTEXTLIKE
রিক জেমস

@ টিমদেব স্পষ্টভাবে কোন অংশে প্রথম প্রশ্নের উত্তর দিয়েছিলেন? আমি আপনার মূল্যবান উত্তরটির প্রথম এবং দ্বিতীয় অংশের উত্তর এবং দ্বিতীয় অংশের উত্তর ( আশা করি যে আপনার প্রথম দুটি প্রশ্নকে অন্তর্ভুক্ত করে এবং এর পরে ) সনাক্ত করতে পারি
ম্যানুয়েল জর্ডান

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

57

আর্ট অফ ইনডেক্সিংয়ের মতো উপস্থাপনাগুলি দেখুন ।

আপডেট 12/2012: আমি আমার একটি নতুন উপস্থাপনা পোস্ট করেছি: ইনডেক্সগুলি কীভাবে ডিজাইন করতে হবে, সত্যিই । আমি এটি সান্টা ক্লারার জেন্ডকন এবং অক্টোবরে 2012 সালে পেরকোনা লাইভ লন্ডনে উপস্থাপন করেছি।

সেরা সূচকগুলি ডিজাইন করা এমন একটি প্রক্রিয়া যা আপনার অ্যাপ্লিকেশনটিতে চালানো প্রশ্নের সাথে মেলে।

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

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

ভর্চার (2500) কলামের জন্য, আপনি সম্ভবত একটি ফুল টেক্সট সূচক বা উপসর্গ সূচক ব্যবহার করতে চান :

CREATE INDEX i ON SomeTable(longVarchar(100));

মনে রাখবেন যে প্রচলিত সূচী সেই দীর্ঘ শব্দটির মাঝখানে থাকতে পারে এমন শব্দগুলির সন্ধান করছেন যদি তা কার্যকর করতে পারে না। তার জন্য, একটি পূর্ণ পাঠ্য সূচি ব্যবহার করুন।


3
তোমাকে অনেক ধন্যবাদ. slideshare.net/matsunobu/… সত্যিই খুব সহায়ক ছিল।
বিশাল পৌদেল



1
আশ্চর্যজনক উপস্থাপনা (২০১২ সালের একটি), সূচকের সম্পূর্ণ পয়েন্টটি সত্যই বুঝতে পেরেছিল।
ডার্কটেক

46

আমি অন্যান্য উত্তরে ভাল পরামর্শের কিছু পুনরাবৃত্তি করব না, তবে যুক্ত করব:

যৌগিক সূচি

আপনি যৌগিক সূচকগুলি তৈরি করতে পারেন - এমন একটি সূচি যাতে একাধিক কলাম অন্তর্ভুক্ত। মাইএসকিউএল এগুলি বাম থেকে ডানে ব্যবহার করতে পারে । সুতরাং আপনার যদি:

Table A
Id
Name
Category
Age
Description

আপনার যদি কোনও যৌগিক সূচক থাকে যাতে সেই অর্থে নাম / বিভাগ / বয়স অন্তর্ভুক্ত থাকে তবে এই বিধিগুলি সূচকটি ব্যবহার করবে:

WHERE Name='Eric' and Category='A'

WHERE Name='Eric' and Category='A' and Age > 18

কিন্তু

WHERE Category='A' and Age > 18

বাম থেকে ডানে ব্যবহার করতে হবে কারণ এই সূচকটি ব্যবহার করবে না has

ব্যাখ্যা করা

মাইএসকিউএলে কোন সূচকগুলি পাওয়া যায় এবং কোনটি প্রকৃতপক্ষে নির্বাচন করে তা বোঝার জন্য ব্যাখ্যা / ব্যাখ্যাটি ব্যবহার করুন। মাইএসকিউএল প্রতি ক্যোয়ারীতে কেবল একটি কী ব্যবহার করবে

EXPLAIN EXTENDED SELECT * from Table WHERE Something='ABC'

স্লো ক্যোয়ারী লগ

কোন প্রশ্নগুলি ধীরগতিতে চলছে তা দেখতে স্লো ক্যোয়ারী লগটি চালু করুন ।

প্রশস্ত কলাম

আপনার যদি একটি প্রশস্ত কলাম থাকে যেখানে বেশ কয়েকটি পার্থক্য প্রথম কয়েকটি অক্ষরে ঘটে তবে আপনি আপনার সূচীতে প্রথম এন অক্ষর ব্যবহার করতে পারেন। উদাহরণ: আমাদের কাছে একটি রেফারেন্স নাম্বার কলামটি বর্ণা (255) হিসাবে সংজ্ঞায়িত হয়েছে তবে 97% ক্ষেত্রে রেফারেন্স সংখ্যাটি 10 ​​টি অক্ষর বা তার চেয়ে কম। আমি সূচিটি পরিবর্তন করে কেবল প্রথম 10 টি অক্ষর এবং কিছুটা উন্নত পারফরম্যান্স দেখতে চাই।


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

20

যদি কোনও টেবিলের ছয়টি কলাম থাকে এবং সেগুলি সমস্ত অনুসন্ধানযোগ্য হয়, তবে আমি কি তাদের সমস্তগুলি বা তাদের কোনওটিই সূচী করি না

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

সূচকের নেতিবাচক কর্মক্ষমতা প্রভাবগুলি কী কী

আপডেট এবং INSERTs ধীর হবে। অতিরিক্ত স্টোরেজ স্পেসের প্রয়োজনীয়তাগুলিও রয়েছে তবে এটি এখনকার দিনে সাধারণ গুরুত্বহীন।

আমার যদি কোনও V 25CHAR 2500 কলাম রয়েছে যা আমার সাইটের অংশগুলি থেকে অনুসন্ধানযোগ্য, আমি কি এটি সূচী করবো?

না, যদি না এটি অনন্য (যার অর্থ এটি ইতিমধ্যে সূচকযুক্ত) বা আপনি কেবল সেই ক্ষেত্রের সাথে সঠিক মিলগুলি অনুসন্ধান করেন (LIKE বা মাইএসকিউএল এর পুরো পাঠ্য সন্ধানটি ব্যবহার করছেন না)।

সাধারণত আমি যে কোনও ক্ষেত্রগুলিতে সন্ধান করতে বা নির্বাচিত হ'ল যেখানে একটি বিধিটি ব্যবহার করে নির্বাচন করব on

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


11

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

সূচিগুলি এড়িয়ে চলুন : কোয়েরিগুলি আরও ভালভাবে সম্পাদন করতে আপনার যদি কোনও নির্দিষ্ট সূচকের প্রয়োজন না হয় তবে এটি তৈরি করবেন না।

ডিস্ক স্পেস : একটি সূচক ডিস্কের স্থান গ্রহণ করে এবং একাধিক সূচী যথাযথভাবে আরও স্থান নেয়। কোনও সূচী না থাকলে এটি আপনাকে দ্রুত সারণির আকার সীমাতে পৌঁছে দিতে পারে। যেখানেই সম্ভব সূচিগুলি এড়িয়ে চলুন।

টেকওয়ে: ওভার ইনডেক্স না


5

সাধারণভাবে সূচকগুলি অতিরিক্ত ডিস্কের স্থান ব্যবহার এবং INSERT/ UPDATE/ DELETEকোয়েরিগুলি ধীর করে দেওয়ার অসুবিধায় থাকায় গতিসম্পন্ন ডাটাবেস অনুসন্ধানে সহায়তা করে । EXPLAINমাইএসকিউএল আপনার সূচকগুলি কখন ব্যবহার করে ফলাফলগুলি ব্যবহার করুন এবং পড়ুন।

যদি কোনও টেবিলের ছয়টি কলাম থাকে এবং সেগুলি সমস্ত অনুসন্ধানযোগ্য হয়, তবে আমি কি তাদের সমস্তকেই সূচক করব বা সেগুলির কোনওটিই নয়?

সমস্ত ছয়টি কলামকে সূচীকরণ সর্বদা সেরা অনুশীলন নয়।

(ক) সুনির্দিষ্ট তথ্য অনুসন্ধানের সময় আপনি কি এই কলামগুলির কোনও ব্যবহার করছেন?

(খ) এই কলামগুলির নির্বাচকতা কী (টেবিলের রেকর্ডের মোট পরিমাণের তুলনায় সেখানে কতগুলি স্বতন্ত্র মান সংরক্ষণ করা হয়)?

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

সূচকের নেতিবাচক কর্মক্ষমতা প্রভাবগুলি কী কী?

ইতিমধ্যে জবাব দেওয়া হয়েছে: অতিরিক্ত ডিস্কের স্থান, সন্নিবেশ করার সময় নিম্ন কার্যকারিতা - আপডেট - মুছুন।

আমার যদি কোনও V 25CHAR 2500 কলাম রয়েছে যা আমার সাইটের অংশগুলি থেকে অনুসন্ধানযোগ্য, আমি কি এটি সূচী করবো?

ফুলটেক্স ইনডেক্স চেষ্টা করে দেখুন ।


4

১/২) সূচী নির্দিষ্ট কিছু অপারেশনগুলিকে গতি দেয় তবে এগুলি সন্নিবেশ, আপডেট এবং মোছার মতো অন্যান্য ক্রিয়াকে ধীর করে দেয়। এটি সূক্ষ্ম ভারসাম্য হতে পারে।

3) একটি সম্পূর্ণ পাঠ্য সূচক বা সম্ভবত স্ফিংক ব্যবহার করুন


প্রতিরোধ করার জন্য slow down other operations like insert, update and deletesআপনি ব্যবহার করতে পারেন START TRANSACTION; YOUR CODE HERE; COMMIT সাহায্য করতে পারে এড়ানো slowing downঅন্যান্য অপারেশন, যেমন শুধুমাত্র একটি সীমাবদ্ধতা এক সময় চেক করবে। সতর্কীকরণ: আপনার ব্যবহার করেন তাহলে REPLACE INTOএবং আপনার SQL_MODE<> STRICT_ALL_TABLESবা উপেক্ষা করা হবে মধ্যে এবং সদৃশ সন্নিবেশ প্রতিস্থাপন করুন। TRADITIONALBulk Load
জয়রিজ্জো

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