মাইএসকিউএল ফিল্টার করার অর্থ কী?


21

মাইএসকিউএল ডক্সে এখানে বর্ণিত হিসাবে :

ফিল্টারকৃত কলামটি টেবিলের সারিগুলির একটি আনুমানিক শতাংশ নির্দেশ করে যা টেবিলের শর্ত দ্বারা ফিল্টার করা হবে। এটি হ'ল সারিগুলি পরীক্ষিত সারিগুলির আনুমানিক সংখ্যা দেখায় এবং সারিগুলি ফিল্টার করা / 100 পূর্ববর্তী সারণির সাথে সংযুক্ত হওয়া সারিগুলির সংখ্যা দেখায়। মাইএসকিউএল ৫.7.৩ এর আগে, আপনি যদি এক্সটেন্ডেড এক্সটেন্ডেড ব্যবহার করেন তবে এই কলামটি প্রদর্শিত হবে। মাইএসকিউএল ৫.7.৩ হিসাবে বর্ধিত আউটপুট ডিফল্টরূপে সক্ষম করা হয়েছে এবং বর্ধিত কীওয়ার্ড অপ্রয়োজনীয়।

আমি এখনও এটি পাই না। এখানে "ফিল্টারড" এর অর্থ কী? এই কলামটি থেকে আমরা কী তথ্য পেতে পারি?

উদাহরণস্বরূপ, যখন আমি অনুসন্ধান করা শুরু করি তখন কিছু জিজ্ঞাসা 100 দেখায় এবং কিছু অন্য 18 বা 100 এর চেয়ে কম দেখায়।

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | a     | range  | search  | 4       |  174 |   18.00  | <--
| PRIMARY     | b     | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | c     | ALL    | PRIMARY | 4       |    1 |   100.00 |

মূল মূল্যটি আমরা এই মান থেকে উপসংহার করতে পারি?

এটি কি বলে যে, কলামটি কেবল 18% ফিল্টার করেছে? অথবা স্কোর যত কম হবে, তত ভাল ইনডেক্স / কোয়েরি?

আমি মাইএসকিউএল 5.7 ব্যবহার করছি

উত্তর:


30

ফিল্টার করতেএখানে অর্থ একটি typeসন্ধানকারী সম্ভাব্য সারি হিসাবে নির্বাচিত সারিগুলির একটি সেটে একটি শর্ত প্রয়োগ করা এবং শর্ত পূরণকারী সারিগুলি রাখার জন্য:

মাইএসকিউএল প্রথমে একটি সূচক ব্যবহার করার চেষ্টা করবে, উদাহরণস্বরূপ -কি ব্যবহার rangeকরে আপনার টেবিলটিতে একটি স্ক্যান করুন । এটি সূচকটি ব্যবহার না করে ১ows৪ টি সারি পাওয়ার অনুমান করে যা এটি সংখ্যাasearchrows । এই পদক্ষেপটি এখনও ফিল্টারিং বলা হয় না।

এর পরে, এই 174 টি সারি অতিরিক্ত শর্তের বিরুদ্ধে পরীক্ষা করাতে হবে (সাধারণত আপনার whereক্লাসে)। মাইএসকিউএল অনুমান করেছে যে কেবলমাত্র 32 টি সারি, সুতরাং এই 174 টি সারিগুলির মধ্যে 18%, ফিল্টারটি প্রয়োগ করার পরে থাকবে। এই 18% এর মান filtered

যদিও 174 এর পরিবর্তে 32 টি সারি থাকা স্পষ্টতই ভাল (যদি আপনি উদাহরণস্বরূপ joinঅন্য কোনও টেবিলের সাহায্যে এগুলি পরে করতে পারেন ), তবে একটি "নিখুঁত" সূচক আপনাকে প্রাথমিক অনুসন্ধান থেকে সরাসরি এই 32 টি সারি দিতো, আপনাকে দেখার সময় বাঁচায় এবং সমস্ত সম্ভাব্য সারির 82% ফিল্টার আউট।

সুতরাং একটি কম মান ইঙ্গিত দিতে পারে যে আরও ভাল সূচক হতে পারে: যেমন একটি পূর্ণ টেবিল স্ক্যান rows=1000এবং filtered=0.1%এটি একটি সূচক যুক্ত হয়ে যেতে পারে rows=1এবং filtered=100%যদি আপনি একটি ভাল সূচক যুক্ত করেন তবে।

অন্যদিকে, তুমি ভাল করেই সম্পূর্ণভাবে এই উপেক্ষা করতে পারেন filtered-value (যা বেশিরভাগ ক্ষেত্রেই একটি সত্যিই খারাপ অনুমান যাহাই হউক না কেন), এবং ফোকাস অন্যান্য আরো গুরুত্বপূর্ণ কলাম উপর (বিশেষত type, keyএবং extra) আপনার প্রশ্নের সাথে নিখুত। উদাহরণস্বরূপ, এটির থেকে মুক্ত হওয়া আরও ভাল হতে পারে filesort(উদাহরণস্বরূপ যে সূচকটি সন্তুষ্ট করে এমন একটি সূচক ব্যবহার করে order by), যদিও এটির কম filteredমান হয়। এবং আরও ভাল typeফলাফল একটি বিশাল কর্মক্ষমতা উন্নতি করতে পারে, এমনকি যদি এটি পরিবর্তন বা এমনকি কম না হতে পারে filtered। উপরের উদাহরণে filtered=0.1%, type=allইতিমধ্যে এটি ইঙ্গিত করার জন্য যথেষ্ট হবে যে আপনি কোনও সূচি যুক্ত না করে এই ক্যোয়ারীটি উন্নত করতে সক্ষম হতে পারেনfiltered

সুতরাং সেই মানটিকে খুব বেশি গুরুত্ব সহকারে নেবেন না: এর 100অর্থ এটিও নয় যে আপনার সূচকগুলি ভাল, না কোনও কম মান অগত্যা খারাপ সূচকগুলিও নির্দেশ করে। typeএটির জন্য আরও ভাল একটি সূচক।


1
ব্যাখ্যা করার জন্য ধন্যবাদ। এটা আমার জন্য অনেক ব্যাখ্যা। আমি মনে করি এটি ভাল সূচক বজায় রাখতে এবং নির্বাচন করার জন্য দরকারী
ইমান তুমোরং

@ ইমানটুমোরং আমি একটি মন্তব্য এবং সে সম্পর্কে একটি উদাহরণ যুক্ত করেছি: সেই মানটিকে খুব বেশি গুরুত্ব সহকারে গ্রহণ করবেন না। আপনি কেবল নিজের দিকে তাকিয়ে typeএবং extra(যা এটি নিজস্ব একটি শিল্প) দ্বারা আপনার ক্যোয়ারীটি অনুকূল করতে পারেন ; আপনি ছাড়া বাঁচতে পারে filtered, কিন্তু ছাড়া না type
সৌরফ্লেরে

ঠিক আছে তাহলে. আমি বুঝতে পেরেছি. আমি এটি ইতিমধ্যে মাইএসকিএল ডক্সে পড়েছি, তারা কীভাবে কার্য সম্পাদনকে প্রভাবিত করে। আপনার ব্যাখ্যার জন্য ধন্যবাদ: ডি
ইমান তুমোরং

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