যখন আপনি ভেবেছিলেন এটি নিরাপদ ...
আপনার মূল্য কি eq_range_index_dive_limit
? বিশেষত, আপনার কি এই ধারাটিতে কম বা বেশি আইটেম রয়েছে IN
?
এটিতে কোনও বেঞ্চমার্ক অন্তর্ভুক্ত থাকবে না তবে অভ্যন্তরীণ কাজগুলিকে কিছুটা পর্যবেক্ষণ করবে। কী চলছে তা দেখার জন্য একটি সরঞ্জাম ব্যবহার করুন - অপটিমাইজার ট্রেস।
ক্যোয়ারী: SELECT * FROM canada WHERE id ...
একটি সঙ্গে OR
3 মূল্যবোধের , ট্রেস অংশ দেখে মনে হচ্ছে:
"condition_processing": {
"condition": "WHERE",
"original_condition": "((`canada`.`id` = 296172) or (`canada`.`id` = 295093) or (`canada`.`id` = 293626))",
"steps": [
{
"transformation": "equality_propagation",
"resulting_condition": "(multiple equal(296172, `canada`.`id`) or multiple equal(295093, `canada`.`id`) or multiple equal(293626, `canada`.`id`))"
},
...
"analyzing_range_alternatives": {
"range_scan_alternatives": [
{
"index": "id",
"ranges": [
"293626 <= id <= 293626",
"295093 <= id <= 295093",
"296172 <= id <= 296172"
],
"index_dives_for_eq_ranges": true,
"chosen": true
...
"refine_plan": [
{
"table": "`canada`",
"pushed_index_condition": "((`canada`.`id` = 296172) or (`canada`.`id` = 295093) or (`canada`.`id` = 293626))",
"table_condition_attached": null,
"access_type": "range"
}
]
আইসিপি কীভাবে দেওয়া হচ্ছে তা নোট করুন ORs
। এটি বোঝায় যে OR
রূপান্তরিত হয়নি IN
, এবং ইনোডিবি আইসিপির =
মাধ্যমে একগুচ্ছ পরীক্ষার কাজ করবে । (মাইআইএসএএম বিবেচনা করার মতো এটি আমি মনে করি না।)
(এটি পারকোনার 5.6.22-71.0-লগ; id
একটি গৌণ সূচক))
এখন কয়েকটি মান সহ IN () এর জন্য
eq_range_index_dive_limit
= 10; 8 মান আছে।
"condition_processing": {
"condition": "WHERE",
"original_condition": "(`canada`.`id` in (296172,295093,293626,295573,297148,296127,295588,295810))",
"steps": [
{
"transformation": "equality_propagation",
"resulting_condition": "(`canada`.`id` in (296172,295093,293626,295573,297148,296127,295588,295810))"
},
...
"analyzing_range_alternatives": {
"range_scan_alternatives": [
{
"index": "id",
"ranges": [
"293626 <= id <= 293626",
"295093 <= id <= 295093",
"295573 <= id <= 295573",
"295588 <= id <= 295588",
"295810 <= id <= 295810",
"296127 <= id <= 296127",
"296172 <= id <= 296172",
"297148 <= id <= 297148"
],
"index_dives_for_eq_ranges": true,
"chosen": true
...
"refine_plan": [
{
"table": "`canada`",
"pushed_index_condition": "(`canada`.`id` in (296172,295093,293626,295573,297148,296127,295588,295810))",
"table_condition_attached": null,
"access_type": "range"
}
]
মনে রাখবেন যে এটি IN
রূপান্তরিত হয়েছে বলে মনে হচ্ছে না OR
।
একটি পার্শ্ব নোট: লক্ষ্য করুন যে ধ্রুবক মানগুলি বাছাই করা হয়েছিল । এটি দুটি উপায়ে উপকারী হতে পারে:
- প্রায় কম লাফিয়ে, আরও ভাল মানের ক্যাশেিং, সমস্ত মান পেতে I / O কম থাকতে পারে।
- যদি দুটি অনুরূপ ক্যোয়ারী পৃথক সংযোগ থেকে আসে এবং তারা লেনদেনে থাকে তবে ওভারল্যাপিং তালিকার কারণে অচলাবস্থার পরিবর্তে বিলম্ব হওয়ার আরও ভাল সম্ভাবনা রয়েছে।
অবশেষে, প্রচুর মান সহ IN ()
{
"condition_processing": {
"condition": "WHERE",
"original_condition": "(`canada`.`id` in (293831,292259,292881,293440,292558,295792,292293,292593,294337,295430,295034,297060,293811,295587,294651,295559,293213,295742,292605,296018,294529,296711,293919,294732,294689,295540,293000,296916,294433,297112,293815,292522,296816,293320,293232,295369,291894,293700,291839,293049,292738,294895,294473,294023,294173,293019,291976,294923,294797,296958,294075,293450,296952,297185,295351,295736,296312,294330,292717,294638,294713,297176,295896,295137,296573,292236,294966,296642,296073,295903,293057,294628,292639,293803,294470,295353,297196,291752,296118,296964,296185,295338,295956,296064,295039,297201,297136,295206,295986,292172,294803,294480,294706,296975,296604,294493,293181,292526,293354,292374,292344,293744,294165,295082,296203,291918,295211,294289,294877,293120,295387))",
"steps": [
{
"transformation": "equality_propagation",
"resulting_condition": "(`canada`.`id` in (293831,292259,292881,293440,292558,295792,292293,292593,294337,295430,295034,297060,293811,295587,294651,295559,293213,295742,292605,296018,294529,296711,293919,294732,294689,295540,293000,296916,294433,297112,293815,292522,296816,293320,293232,295369,291894,293700,291839,293049,292738,294895,294473,294023,294173,293019,291976,294923,294797,296958,294075,293450,296952,297185,295351,295736,296312,294330,292717,294638,294713,297176,295896,295137,296573,292236,294966,296642,296073,295903,293057,294628,292639,293803,294470,295353,297196,291752,296118,296964,296185,295338,295956,296064,295039,297201,297136,295206,295986,292172,294803,294480,294706,296975,296604,294493,293181,292526,293354,292374,292344,293744,294165,295082,296203,291918,295211,294289,294877,293120,295387))"
},
...
"analyzing_range_alternatives": {
"range_scan_alternatives": [
{
"index": "id",
"ranges": [
"291752 <= id <= 291752",
"291839 <= id <= 291839",
...
"297196 <= id <= 297196",
"297201 <= id <= 297201"
],
"index_dives_for_eq_ranges": false,
"rows": 111,
"chosen": true
...
"refine_plan": [
{
"table": "`canada`",
"pushed_index_condition": "(`canada`.`id` in (293831,292259,292881,293440,292558,295792,292293,292593,294337,295430,295034,297060,293811,295587,294651,295559,293213,295742,292605,296018,294529,296711,293919,294732,294689,295540,293000,296916,294433,297112,293815,292522,296816,293320,293232,295369,291894,293700,291839,293049,292738,294895,294473,294023,294173,293019,291976,294923,294797,296958,294075,293450,296952,297185,295351,295736,296312,294330,292717,294638,294713,297176,295896,295137,296573,292236,294966,296642,296073,295903,293057,294628,292639,293803,294470,295353,297196,291752,296118,296964,296185,295338,295956,296064,295039,297201,297136,295206,295986,292172,294803,294480,294706,296975,296604,294493,293181,292526,293354,292374,292344,293744,294165,295082,296203,291918,295211,294289,294877,293120,295387))",
"table_condition_attached": null,
"access_type": "range"
}
]
পার্শ্ব দ্রষ্টব্য: ট্রেসগুলির বাল্কনেসের কারণে আমার এটি প্রয়োজন:
@@global.optimizer_trace_max_mem_size = 32222;
s I could say that it can also be converted to UNION
এর সারিতে রূপান্তরিত হবে যা কোয়েরিটি অনুকূলিত করার জন্য OR`s প্রতিস্থাপনের জন্য পুনঃসংশ্লিষ্ট।