- 1 1. MySQL EXPLAIN යනු කුමක්ද? ඔබ එය භාවිතා කළ යුත්තේ ඇයි?
- 2 2. EXPLAIN ප්රතිදාන කොලම් තේරුම් ගැනීම (චිත්ර සහිතව)
- 3 3. උදාහරණ මගින් ඉගෙන ගන්න: EXPLAIN භාවිතා කිරීම සහ ප්රතිඵල විශ්ලේෂණය
- 4 4. EXPLAIN ප්රතිඵල මත පදනම් වූ ප්රායෝගික විමසුම් ආරෝපණ තාක්ෂණයන්
- 5 5. MySQL Workbench Visual EXPLAIN සමඟ දෘශ්ය විශ්ලේෂණය
- 6 6. නිතර අසන ප්රශ්න (FAQ)
- 7 7. සාරාංශය: EXPLAIN භාවිතා කර SQL සුදානම් කිරීමේ අවස්ථා සොයාගන්න
- 7.1 ✅ EXPLAIN හි භූමිකාව සහ මූලික භාවිතය
- 7.2 ✅ ප්රතිඵල තීරුවල කියවීම සහ කාර්ය සාධන ඇගයීම
- 7.3 ✅ සැබෑ උදාහරණ මගින් ප්රායෝගික නිරීක්ෂණය සහ සුදානම් කිරීම
- 7.4 ✅ දෘශ්ය තහවුරු කිරීම සඳහා GUI මෙවලම් භාවිතා කරන්න
- 7.5 ✅ වාස්තුකාරී අවස්ථා සඳහා FAQ ආවරණය
- 7.6 ✍️ EXPLAIN අභ්යාසයක් කරගෙන ඔබේ SQL කුසලතා වැඩිදියුණු කරන්න
1. MySQL EXPLAIN යනු කුමක්ද? ඔබ එය භාවිතා කළ යුත්තේ ඇයි?
EXPLAIN යනු කුමක්ද? විධිවිධාන සැලසුම් දෘශ්යකරණය කිරීම සඳහා විධානයක්
MySQL හි, EXPLAIN යනු SQL ප්රශ්නයක් විධිවිධානය වන ආකාරය දෘශ්යකරණය කිරීමට භාවිතා වන විධානයකි. එය විශේෂයෙන්ම SELECT ප්රකාශනවල දත්ත ලබාගැනීමේ ආකාරය තේරුම් ගැනීමට උපකාරී වන අතර, ප්රශ්නයේ විධිවිධාන සැලසුම පෙන්වයි.
උදාහරණයක් ලෙස, SELECT * FROM users WHERE age > 30 වැනි ප්රශ්නයක් විධිවිධානය කිරීමේදී, EXPLAIN ඔබට MySQL භාවිතා කරන සුචිකරණය සහ වගු ස්කෑන් කරන නියමය අනුපිළිවෙල වැනි අභ්යන්තර විස්තර දැකීමට ඉඩ සලසයි.
භාවිතය සරලයි — ඔබේ ප්රශ්නයේ ආරම්භයේදී EXPLAIN එකතු කරන්න පමණි.
EXPLAIN SELECT * FROM users WHERE age > 30;
මෙය මෙම ආකාරයට ලියන විට, ප්රශ්න විධිවිධාන සැලසුම විස්තර කරන බහු කොලම් පෙන්වනු ඇත. එක් එක් අයිතමය පහත කොටස්වල විස්තරාත්මකව පැහැදිලි කරනු ඇත.
ඔබ එය භාවිතා කළ යුත්තේ ඇයි: මන්දගාමී ප්රශ්න හේතු දෘශ්යමාන කරන්න
බොහෝ සංවර්ධකයින් කරන සුලබ වැරැද්දක් වන්නේ “SQL ක්රියා කරන්නේ නම්, ගැටලුවක් නැහැ” යන උපකල්පනය කිරීමයි. කෙසේ වෙතත්, මන්දගාමී ප්රශ්න විධිවිධානය සමස්ත යෙදුම් කාර්ය සාධනයට ඍණාත්මකව බලපෑම් කළ හැක.
විශාල දත්ත ප්රමාණ හසුරුවන පද්ධතිවල, අකාර්යක්ෂම ප්රශ්නයක් පවා බෝතල්නෙක් බවට පත්වී සේවාදායකයා මත සැලකිය යුතු බරක් දැමීමට හැක.
එහිදී EXPLAIN ඉතා උපකාරී වේ. විධිවිධාන සැලසුම සමාලෝචනය කිරීමෙන්, සම්පූර්ණ වගු ස්කෑන් කිරීමක් සිදුවන බව හෝ සුචිකරණ නිසි ලෙස භාවිතා වන බව පැහැදිලිව දැකිය හැක.
අනෙකින් කිව්වොත්, EXPLAIN භාවිතය ඔබට කාර්ය සාධන බෝතල්නෙක හඳුනාගැනීමට සහ ඒවා ඇඩ්ජස්ට් කරන්නේ කෙසේදැයි තීරණය කිරීමට ඉඩ සලසයි. විශේෂයෙන්ම, EXPLAIN ප්රතිදාන විශ්ලේෂණය කිරීමේදී සුචිකරණ ඵලදායිතාව බොහෝ දුරට පැහැදිලි වේ.
EXPLAIN විසින් සහාය දක්වන SQL ප්රකාශන (SELECT, UPDATE, ආදිය)
EXPLAIN SELECT ප්රකාශන සමඟ පමණක් නොව පහත SQL ප්රකාශන සමඟ ද ක්රියා කරයි:
- SELECT
- DELETE
- INSERT
- REPLACE
- UPDATE
උදාහරණයක් ලෙස, විශාල දත්ත සෙට් එකක DELETE ප්රකාශනයක් ධාවනය කිරීමේදී, සුචිකරණ නිසි ලෙස භාවිතා නොවන්නේ නම්, MySQL සම්පූර්ණ වගු ස්කෑන් කිරීමක් සිදුකළ හැකි අතර, විධිවිධාන කාලය සැලකිය යුතු ලෙස වැඩි කරයි. මෙවැනි ගැටලු වළක්වා ගැනීමට, DELETE හෝ UPDATE ප්රකාශන ධාවනය කිරීමට පෙර EXPLAIN සමඟ විධිවිධාන සැලසුම පරීක්ෂා කිරීම ඉතා ඵලදායී වේ.
ඔබේ MySQL සංස්කරණය අනුව, ඔබට EXPLAIN ANALYZE භාවිතා කළ හැකි අතර, එය තවත් විස්තරාත්මක විධිවිධාන තොරතුරු සපයයි. මෙය ලිපියේ පසුකොටසකදී ආවරණය කරනු ඇත.
2. EXPLAIN ප්රතිදාන කොලම් තේරුම් ගැනීම (චිත්ර සහිතව)
මූලික ප්රතිදාන කොලම් ලැයිස්තුව සහ පැහැදිලි කිරීම
EXPLAIN ප්රතිදානය පහත කොලම් ඇතුළත් වේ (MySQL සංස්කරණය අනුව තරමක් වෙනස්):
| Column Name | Description |
|---|---|
| id | Identifier indicating execution order or grouping within the query |
| select_type | The type of SELECT (e.g., subquery, UNION) |
| table | Name of the table being accessed |
| type | Join type (access method) |
| possible_keys | Possible indexes that could be used |
| key | Actual index used |
| key_len | Length of the used index (in bytes) |
| ref | Value compared against the index |
| rows | Estimated number of rows MySQL expects to scan |
| Extra | Additional details (sorting, temporary tables, etc.) |
මේවායින්, කාර්ය සාධන ටියුනිං සඳහා වඩාත් වැදගත් සිව් කොලම් වන්නේ type / key / rows / Extra.
සිව් ප්රධාන කොලම් කියවීමේ ආකාරය: type / key / rows / Extra
1. type (ප්රවේශ ක්රමය)
මෙම කොලම MySQL වගුවට ප්රවේශ කරන ආකාරය පෙන්වයි. එය කාර්ය සාධනයට සෘජුව බලපායි.
| Example Value | Meaning | Performance Level |
|---|---|---|
| ALL | Full table scan | ✕ Slow |
| index | Full index scan | △ Moderate |
| range | Range scan | ○ Good |
| ref / eq_ref | Index lookup | ◎ Excellent |
| const / system | Single-row access | ◎ Very Fast |
type = ALL නම්, එය සුචිකරණයක් භාවිතා නොකර සියලුම පේළි ස්කෑන් කරන බව තේරුම් ගනී — මන්දගාමී ප්රවේශ ක්රමය. ආදර්ශයක් ලෙස, ඔබේ ප්රශ්න ref හෝ const වෙත ඇඩ්ජස්ට් කළ යුතුය.
2. key (භාවිතා කළ සුචිකරණය)
මෙම කොලම තත්යයෙන්ම භාවිතා කළ සුචිකරණයේ නම පෙන්වයි.
කිසිවක් පෙන්වා නැත්නම්, ප්රශ්නය සුචිකරණයක් භාවිතා නොකරන බවට ඉඩ ඇත.
3. rows (අනුමාන කළ ස්කෑන් කිරීමේ පේළි)
මෙය MySQL අනුමාන කරන ස්කෑන් කිරීමේ පේළි ගණන පෙන්වයි. ඉහළ ගණනක් තිබේ නම්, විධිවිධාන කාලය දිගු වන බවට ඉඩ ඇත. ඉලක්කය වන්නේ ඔබේ ප්රශ්නය ඇඩ්ජස්ට් කිරීමෙන් rows 1 ට ආසන්න වීමයි.
4. Extra (අමතර තොරතුරු)
Extra කොලම සංවර්ධන හෝ තාවකාලික වගු භාවිතය වැනි අමතර විස්තර ඇතුළත් වේ.
| Extra Example | Meaning | Optimization Hint |
|---|---|---|
| Using temporary | Temporary table used (performance degradation) | Review GROUP BY / ORDER BY |
| Using filesort | Manual sorting operation performed | Add index-based sorting |
| Using index | Data retrieved using only the index (fast) | ○ Good state |
ඔබට Using temporary හෝ Using filesort දැකීමට නම්, ඔබේ SQL ප්රකාශනය හෝ සුචිකරණ සැලසුම සමාලෝචනය කළ යුතුය.
[Illustration] නියැදි EXPLAIN ප්රතිදානය
EXPLAIN SELECT * FROM users WHERE age > 30;
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | users | ALL | age_index | NULL | NULL | NULL | 5000 | Using where |
මෙම උදාහරණයේදී, සුචිකරණය (age_index) පවතිනවා වුවද, එය තත්යයෙන්ම භාවිතා නොවී ALL (සම්පූර්ණ වගු ස්කෑන්) ඇති වේ. මෙය ඇඩ්ජස්ට් කිරීමට ඉඩක් ඇති බව පෙන්වයි.

3. උදාහරණ මගින් ඉගෙන ගන්න: EXPLAIN භාවිතා කිරීම සහ ප්රතිඵල විශ්ලේෂණය
උදාහරණ 1: සරල SELECT විමසුමක් සඳහා EXPLAIN ප්රතිඵල (විස්තර සමඟ)
එක් වගුවක් මත සරල SELECT විමසුමක් ආරම්භ කරමු.
EXPLAIN SELECT * FROM users WHERE age > 30;
EXPLAIN ප්රතිඵලය මෙසේ පෙනේ යැයි ගණනය කරමු:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | users | ALL | age | NULL | NULL | NULL | 5000 | Using where |
විස්තරය:
type: ALL→ සම්පූර්ණ වගුවේ පරික්ෂාව. කිසිදු දර්ශකයක් (index) භාවිතා නොවේ.key: NULL→ දර්ශකයක් (index) භාවිතා නොවේ.rows: 5000→ MySQL අනුමාන කරන්නේ පමණක් 5,000 පේළි පරික්ෂා කරන බවයි.
ආරෝපණය කිරීමේ ක්රමය:
age තීරුවට දර්ශකයක් (index) එකතු කිරීමෙන් විමසුමේ කාර්ය සාධනය ගණනාවක් වැඩි වේ.
CREATE INDEX idx_age ON users(age);
ඔබ EXPLAIN නැවත ධාවනය කළහොත්, type එක range හෝ ref වෙත වෙනස් වී ඇති බව ඔබට දැකගත හැකි වන අතර, දර්ශකය දැන් භාවිතා කරමින් පවතී.
උදාහරණ 2: JOIN සමඟ විමසුමක් සඳහා EXPLAIN ප්රතිඵල විශ්ලේෂණය
ඊළඟට, බහු වගු JOIN කරන උදාහරණයක් බලමු.
EXPLAIN
SELECT orders.id, users.name
FROM orders
JOIN users ON orders.user_id = users.id
WHERE users.age > 30;
උදාහරණ ප්රතිඵලය:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | users | ALL | PRIMARY, age | NULL | NULL | NULL | 3000 | Using where |
| 1 | SIMPLE | orders | ref | user_id | user_id | 4 | users.id | 5 | Using index |
විස්තරය:
usersවගුව සම්පූර්ණ පරික්ෂාවක් (ALL) කරයි, එය වැඩිදියුණු කළ යුතු කොටසයි.ordersවගුවrefදර්ශකයක් (index) භාවිතා කරයි, එය කාර්යක්ෂමයි.
ආරෝපණය කිරීමේ කරුණු:
users.ageතීරුවට දර්ශකයක් (index) එකතු කිරීමෙන්usersවගුවේ පරික්ෂාව වේගවත් වේ.- ප්රධාන අරමුණ වන්නේ දර්ශක (index) නිර්මාණය කර WHERE වාක්යය JOIN කිරීමට පෙර පේළි පෙරහන් කර ගත හැකි ලෙස සැලසුම් කිරීමයි.
දර්ශක (Indexes) භාවිතා නොවන අවස්ථා (නරක උදාහරණ → හොඳ උදාහරණ)
නරක උදාහරණ: WHERE වාක්යය තුළ ක්රියාකාරකමක් භාවිතා කිරීම
SELECT * FROM users WHERE DATE(created_at) = '2024-01-01';
මෙවැනි විමසුමක් සමඟ, DATE() ක්රියාකාරකම තීරුවේ අගය පරිවර්තනය කරන බැවින් දර්ශකය (index) භාවිතා නොකළ හැකි වේ, එමනිසා MySQL දර්ශකය කාර්යක්ෂම ලෙස භාවිතා නොකරයි.
ආරෝපිත උදාහරණ: ක්රියාකාරකමක් භාවිතා නොකර පරාසයක් නියම කිරීම
SELECT * FROM users
WHERE created_at >= '2024-01-01' AND created_at < '2024-01-02';
මෙය created_at තීරුවේ දර්ශකය (index) සක්රිය කරයි, MySQLට දත්ත කාර්යක්ෂම ලෙස ලබා ගැනීමට ඉඩ සලසයි.
නිගමනය: ප්රායෝගික EXPLAIN උදාහරණ භාවිතා කර කාර්ය සාධන ගැටළු හඳුනා ගැනීම
ප්රායෝගික විමසුම්වල EXPLAIN ප්රතිඵල විශ්ලේෂණය කිරීමෙන් බොත්තල (bottlenecks) කොහේද, ඒවා කෙසේ හොඳට කරගත හැකිද යන්න පැහැදිලිව හඳුනාගත හැකිය.
ALL→ සම්පූර්ණ පරික්ෂාව. දර්ශක (index) එකතු කිරීම හෝ සකස් කිරීම සලකා බලන්න.key = NULL→ දර්ශකයක් (index) භාවිතා නොවේ. පරීක්ෂා කිරීම අවශ්යයි.ExtraහිUsing temporary→ කාර්ය සාධන අනතුරු ඇඟවීම.- කොන්දේසි තුළ ක්රියාකාරකම් හෝ ගණනයන් භාවිතා කිරීම දර්ශක (index) භාවිතය අක්රිය කරයි.
මෙම කරුණු මත පදනම්ව, EXPLAIN සමඟ විමසුම් කාර්ය සාධනය නිරන්තරයෙන් වැඩිදියුණු කරගත හැකිය.
4. EXPLAIN ප්රතිඵල මත පදනම් වූ ප්රායෝගික විමසුම් ආරෝපණ තාක්ෂණයන්
“type: ALL” වැලැක්වීමට දර්ශක (Index) සැලසුම් මූලික කරුණු
EXPLAIN type: ALL පෙන්වන්නේ MySQL සම්පූර්ණ වගුවක් පරික්ෂා කරමින් සිටින බවයි. මෙය ඉතා වැය වැඩි ක්රියාවලියක් වන අතර, දහස් ගණනකින් මිලියන ගණනක පේළි අඩංගු වගු සඳහා ප්රධාන බාධකයක් වේ.
එය වැලැක්වීමේ ක්රමය:
- WHERE වාක්යයේ භාවිතා වන තීරුවලට දර්ශක (index) එකතු කරන්න
CREATE INDEX idx_age ON users(age);
- බහු කොන්දේසි තිබේ නම්, සංයුක්ත දර්ශක (composite index) සලකා බලන්න
CREATE INDEX idx_status_created ON orders(status, created_at);
- ප්රතිඵලය (prefix) නොමැති LIKE රටා වලින් වළකින්න
-- Bad example (index won’t work) WHERE name LIKE '%tanaka%' -- Good example (index may work) WHERE name LIKE 'tanaka%'
“Extra: Using temporary” යනු කුමක්ද? එය සකස් කිරීමේ ක්රමය
Extra තීරුව “Using temporary” පෙන්වන්නේ MySQL විමසුම ක්රියාත්මක කිරීම සඳහා අභ්යන්තරව තාවකාලික වගුවක් සෑදීම යන අර්ථයයි. මෙය GROUP BY හෝ ORDER BY වැනි ක්රියාකාරකම් දර්ශක (index) මගින් සකස් කළ නොහැකි විට සිදුවේ; එවිට MySQL දත්ත අතින් සංවිධානය කිරීමට තාවකාලික ගබඩාවක් භාවිතා කරයි.
එය සකස් කිරීමේ ක්රමය:
- GROUP BY සහ ORDER BY හි භාවිතා වන තීරුවලට දර්ශක (index) යොදන්න
CREATE INDEX idx_group_col ON sales(department_id);
- අත්යවශ්ය නොවන සෝට් කිරීම හෝ GROUP BY ඔබගේ SQL එකෙන් ඉවත් කරන්න
- ලක්ෂ්ය දත්ත අඩු කිරීම සඳහා LIMIT හෝ උප-විමසුම් (subqueries) භාවිතා කරන්න
“rows” සහ “key” ඔබට කාර්ය සාධනය වැඩිදියුණු කිරීමට කියන දේ තේරුම් ගන්න
rows තීරුව MySQL පූර්ව අනුමාන කරන පරිදි වගුවෙන් කියවීමට අවශ්ය පේළි ගණන පෙන්වයි. උදාහරණයක් ලෙස, rows = 100000 ලෙස පෙන්වන විමසුමක් කාර්ය සාධනයට වැදගත් බලපෑමක් ඇති කරයි.
මෙම අගය විශාල නම්, ඔබට පරික්ෂා කරන පේළි ගණන අඩු කරන ඉන්ඩෙක්ස් යෙදවීමට හෝ ඔබේ කොන්දේසි නැවත ලියීමට අවශ්ය විය හැක.
අනෙක් පැත්තට, key තීරුව වත්මන් භාවිතා වන ඉන්ඩෙක්ස් පෙන්වයි. එය NULL නම්, ඉන්ඩෙක්ස් කිසිවක් භාවිතා නොවන බවට අනතුරු ඇඟවීමකි.
ඔප්ටිමයිසේෂන් පරීක්ෂා ලැයිස්තුව:
rowsවිශාල නම් → ඔබේ ෆිල්ටර් (filters) ප්රභාවීද? ඉන්ඩෙක්ස් නිසි ලෙස භාවිතා කරමින් තිබේද?key = NULLනම් → WHERE/JOIN හි ඔබ භාවිතා කරන රටා (patterns) ඉන්ඩෙක්ස් භාවිතය වැළැක්වෙයිද?
EXPLAIN සහ ඔප්ටිමයිසේෂන් අභ්යාසයක් කරගන්න
විමසුම් කාර්යක්ෂමව සකස් කිරීමට, මූලික ක්රමය මෙම චක්රය නැවත නැවත කිරීමයි: ලියන්න → EXPLAIN සමඟ පරීක්ෂා කරන්න → වැඩිදියුණු කරන්න → නැවත පරීක්ෂා කරන්න.
මෙම වැඩපිළිවෙළ මතක තබා ගන්න:
- විමසුම සාමාන්ය ලෙස ලියන්න
EXPLAINසමඟ ක්රියාත්මක සැලැස්ම පරීක්ෂා කරන්නtype,key,rows, සහExtraසමාලෝචනය කරන්න- බොත්තලක් (bottleneck) ඇත්නම්, ඉන්ඩෙක්ස් සංශෝධනය කරන්න හෝ විමසුම නැවත ලියන්න
EXPLAINනැවත ධාවනය කර වැඩිදියුණුකම් තහවුරු කරන්න
විමසුම් කාර්ය සාධනය ඉන්ඩෙක්ස් පමණක් නොව, විමසුම ස්වයං ලියන ආකාරය මගින්ද බලපායි. සරල සංසන්දන (functions වෙනුවට) සහ සරල කොන්දේසි අපේක්ෂා නොකළ පරිදි ප්රභාවී වේ.
5. MySQL Workbench Visual EXPLAIN සමඟ දෘශ්ය විශ්ලේෂණය
GUI මෙවලමක් සමඟ ක්රියාත්මක සැලසුම් දෘශ්ය ලෙස පරීක්ෂා කරන්න
MySQL Workbench යනු MySQL පරිපාලනය සහ සංවර්ධනය සඳහා විශේෂිත GUI මෙවලමකි. එහි විශාල වාසියක් වන්නේ ක්රියාත්මක සැලසුම් දෘශ්ය ලෙස පෙන්වීමට හැකියාව ඇති බවයි, ඒවා ටර්මිනල් ප්රතිඵලවලින් කියවීමට බොහෝ විට අමාරු වේ.
Visual EXPLAIN සමඟ, ඔබට පහත තොරතුරු ගසක් (tree) ව්යුහය තුළ සමාලෝචනය කළ හැක:
- සෑම වගුවකම ප්රවේශ (access) ක්රමය
- භාවිතා කරන JOIN වර්ගය
- ඉන්ඩෙක්ස් භාවිත තත්ත්වය
- සම්පූර්ණ වගුවක් පරික්ෂා කරමින් තිබේද යන්න
- දත්ත ෆිල්ටර කිරීම සහ සෝට් කිරීමේ ක්රියාකාරකම්
සැලසුම රූපක ලෙස පෙන්වන බැවින්, අරඹන්නාදීමත් පවා කාර්ය සාධන bottleneck (බොත්තල) කොහේ ඇතිද යන්න පහසුවෙන් හඳුනාගත හැක.
[With Images] Visual EXPLAIN භාවිතා කිරීම සහ කියවීම (පියවරෙන් පියවර)
Visual EXPLAIN භාවිතා කිරීමට පහත පියවර අනුගමනය කරන්න:
- MySQL Workbench ආරම්භ කර ඔබේ දත්ත ගබඩා සම්බන්ධතාවය (connection) විවෘත කරන්න → සම්බන්ධතාවය පෙර සැකසී ඇති බවට විශ්වාස කරන්න.
- SQL සංස්කාරකයේ ඔබේ ඉලක්ක විමසුම ඇතුළත් කරන්න
SELECT * FROM users WHERE age > 30;
- EXPLAIN බොත්තමේ පසුව “EXPLAIN VISUAL” අයිකනය ක්ලික් කරන්න → හෝ දකුණු-ක්ලික් කර මෙනුවෙන් “Visual Explain” තෝරන්න.
- ක්රියාත්මක සැලසුම දෘශ්ය ලෙස පෙන්වනු ලැබේ ඔබ එක් එක් නෝඩ් (වගුව) ක්ලික් කරන විට, පහත වැනි විස්තරාත්මක තොරතුරු පෙන්වයි:
- ප්රවේශ ක්රමය (ALL, ref, range, ආදිය)
- භාවිතා කරන ඉන්ඩෙක්ස්
- අනුමාන පේළි (rows)
- ෆිල්ටර කොන්දේසි සහ JOIN ක්රමය
සටහන:
Visual EXPLAIN හි, නෝඩ් වර්ණ සහ අයිකන බර වැඩකාරකම් හෝ අකාර්යක්ෂම කොටස් උද්දීපනය කිරීමට උපකාරී වේ.
රතු වර්ණයෙන් උද්දීපනය කරන නෝඩ් වෙත විශේෂ අවධානයක් දෙන්න, ඒවා සාමාන්යයෙන් කාර්ය සාධන ගැටළු පෙන්වයි.
අරඹන්නාදීමත් බොත්තල (bottlenecks) පහසුවෙන් හඳුනාගත හැක
පෙළ-අධාරිත EXPLAIN ප්රතිඵල පළමු වරට බලන විට අධික ලෙස හැඟේ, නමුත් Visual EXPLAIN ගැටළු ප්රදේශ දෘශ්ය ලෙස උද්දීපනය කරයි.
උදාහරණයක් ලෙස, පහත දේ හඳුනා ගැනීම පහසු වේ:
type: ALLභාවිතා කරන වගුUsing temporaryපෙන්වන විමසුම් කොටස්- අත්යවශ්ය නොවන JOIN සමඟ රටා
- ඉන්ඩෙක්ස් භාවිත නොවන වගු
එහි GUI අතුරුමුහුණත සමඟ, ඔබට ඉක්මනින් ඔප්ටිමයිසේෂන් අනුමාන සකස් කළ හැකි අතර, කණ්ඩායමක් තුළ SQL කාර්ය සාධනය බෙදා ගැනීමට සහ සමාලෝචනය කිරීමටද ප්රයෝජනවත් වේ.
Visual EXPLAIN අරඹන්නාදීමත් මධ්යම SQL පරිශීලකයන් සඳහා විශේෂයෙන් වටිනා වේ.
ඔබ EXPLAIN ප්රතිඵල අර්ථ දැක්වීමට අසීරු නම්, මෙම විශේෂාංගය භාවිතා කර බලන්න.
6. නිතර අසන ප්රශ්න (FAQ)
Q1. මට EXPLAIN කවදා භාවිතා කළ යුතුද?
A. ඔබ query එකක ක්රියාත්මක වේගය ගැන අසපසු වීමක් ඇති වූ විට— විශේෂයෙන් query එක “මන්දගාමී” බව හැඟේ නම්— EXPLAIN භාවිතා කළ යුතුය. නව සෑදූ query එක ඉන්ඩෙක්ස් නිවැරදිව භාවිතා කරයිද යන්න තහවුරු කිරීමටද මෙය ප්රයෝජනවත් වේ.
By checking the execution plan before deployment, you can identify performance risks early.
Q2. ප්රතිඵලය type = ALL ලෙස පෙන්වයි. මට මොකක් කරන්න ඕනද?
A. type: ALL යනු MySQL සම්පූර්ණ වගුවක් පරික්ෂා කරමින් සිටින බවයි. මෙය ඉතා වැය වැඩි ක්රියාමාර්ගයක් වන අතර, විශාල වගු වලදී කාර්ය සාධනය ගැඹුරු ලෙස අඩු කරයි.
පහත ක්රියාමාර්ග සලකා බලන්න:
- WHERE වාක්යයේ භාවිතා වන තීරුවලට ඉන්ඩෙක්ස් එකතු කරන්න
- ඉන්ඩෙක්ස් භාවිතය අක්රිය කරන ක්රියාකාරකම් හෝ ෆංශන් වලින් වැළකී සිටින්න
SELECT *වලින් වැළකී අවශ්ය තීරුවල පමණක් ලබා ගන්න
Q3. Extra තීරුවේ “Using temporary” යනුවෙන් පෙන්වීම ගැටළුවක්ද?
A. Using temporary යනු MySQL අභ්යන්තරව තාවකාලික වගුවක් සාදමින් query එක ක්රියාත්මක කරයි කියා අර්ථ දක්වයි. මෙය සාමාන්යයෙන් GROUP BY හෝ ORDER BY සමඟ සිදුවේ, සහ මතකය හා තැටි I/O වියදම් වැඩි කරයි.
ඉදිරිපත් කළ හැකි විසඳුම්:
- GROUP BY / ORDER BY භාවිතා කරන තීරුවලට ඉන්ඩෙක්ස් එකතු කරන්න
- අවශ්ය නොවන සෝට් කිරීම හෝ එකතු කිරීම අඩු කරන්න
- LIMIT හෝ උප-විමසුම් (subqueries) භාවිතා කර දත්ත කට්ටලය අඩු කරන්න
Q4. Visual EXPLAIN කෙසේ භාවිතා කරන්නේද?
A. ඔබට නිල MySQL මෙවලම “MySQL Workbench” භාවිතා කර EXPLAIN ප්රතිඵල GUI එකක පහසුවෙන් දෘශ්යමාන කරගත හැක. ඔබේ query එක ඇතුළත් කර “Visual Explain” බොත්තම ක්ලික් කරන්න.
මෙය විශේෂයෙන් නිර්දේශ කරන්නේ:
- පෙළ-අධාරිත EXPLAIN ප්රතිඵල කියවීමට අමාරු වන පරිශීලකයින්
- සංකීර්ණ JOIN ගොඩනැගීම් දෘශ්යමානව තේරුම් ගැනීමට කැමති අය
- SQL කාර්ය සාධන එකතුවට සමඟ සමාලෝචනය කරන කණ්ඩායම්
Q5. ඉන්ඩෙක්ස් එක තිබුණත් එය භාවිතා නොවන්නේ ඇයි?
A. ඉන්ඩෙක්ස් එක තිබුණත් MySQL එය සෑම විටම භාවිතා නොකරයි. ඉන්ඩෙක්ස් අහෝසි විය හැකි අවස්ථා:
- WHERE වාක්යයේ ෆංශන් හෝ ප්රකාශන භාවිතා කිරීම (උදා:
WHERE YEAR(created_at) = 2024) - අඩු කාඩිනල් (අගයන්ගේ ව්යාප්තිය අඩු) වන විට, සම්පූර්ණ පරික්ෂාව වේගවත් ලෙස සැලකේ
- තීරුවේ අනුපිළිවෙල සංයුක්ත ඉන්ඩෙක්ස් නිර්වචනයට නොගැලපේ
ඉන්ඩෙක්ස් නිවැරදිව භාවිතා කරයිදැයි තහවුරු කිරීමට, EXPLAIN හි key තීරුව සෑම විටම පරීක්ෂා කරන්න.
7. සාරාංශය: EXPLAIN භාවිතා කර SQL සුදානම් කිරීමේ අවස්ථා සොයාගන්න
Performance tuning in MySQL is not just about adding indexes.
The essential tool for identifying which queries are bottlenecks, why they are slow, and how to fix them is EXPLAIN.
මෙම ලිපියේ, අපි පහත මූලික කරුණු ආවරණය කළෙමු:
✅ EXPLAIN හි භූමිකාව සහ මූලික භාවිතය
- query එකකට පෙර
EXPLAINඑකතු කිරීමෙන් එහි ක්රියාත්මක සැලැස්ම පරීක්ෂා කරන්න - සම්පූර්ණ පරික්ෂා (ALL) සහ Using temporary වැනි ගැටළු දෘශ්යමාන වේ
✅ ප්රතිඵල තීරුවල කියවීම සහ කාර්ය සාධන ඇගයීම
- අතිශය වැදගත් තීරුවලින් හතරක්
type,key,rows, සහExtraවේ - සම්පූර්ණ වගු පරික්ෂා වලින් වැළකී නිවැරදි ඉන්ඩෙක්ස් භාවිතය අරමුණ කරගන්න
- Using temporary හෝ Using filesort පෙනේ නම් අවධානයෙන් සිටින්න
✅ සැබෑ උදාහරණ මගින් ප්රායෝගික නිරීක්ෂණය සහ සුදානම් කිරීම
- ඉන්ඩෙක්ස් එකතු කිරීම පමණක් නොව, SQL වාක්ය රීති සංශෝධනයද වැදගත්
- JOIN හෝ උප-විමසුම් (subqueries) සමඟ සංකීර්ණ query ගත්තාද EXPLAIN මගින් විශ්ලේෂණය කළ හැක
- ක්රියාත්මක සැලැස්ම මත query ගතව පවත්වා සංශෝධනය කිරීම කාර්ය සාධනය වැඩිම වේගයෙන් වැඩි කිරීමට උපකාරී වේ
✅ දෘශ්ය තහවුරු කිරීම සඳහා GUI මෙවලම් භාවිතා කරන්න
- MySQL Workbench හි “Visual EXPLAIN” භාවිතා කර ක්රියාත්මක සැලැස්ම ග්රැෆික් ලෙස බලන්න
- ආරම්භකයන්ට bottleneck ගොඩනැගීම් දෘශ්යමානව හඳුනා ගැනීමට පහසු
- කණ්ඩායම් සාකච්ඡා සහ SQL කාර්ය සාධන සමාලෝචන සඳහා ප්රයෝජනවත්
✅ වාස්තුකාරී අවස්ථා සඳහා FAQ ආවරණය
- type=ALL සහ key=NULL වැනි ගැටළු සඳහා හේතු සහ විසඳුම් පැහැදිලි කළා
- ඉන්ඩෙක්ස් භාවිතා නොකිරීමේ උදාහරණ ලබා දුන්නා
✍️ EXPLAIN අභ්යාසයක් කරගෙන ඔබේ SQL කුසලතා වැඩිදියුණු කරන්න
ඔබ SQL ලියන සෑම වරක්ම EXPLAIN මගින් query පරීක්ෂා කිරීමේ අභ්යාසයක් ගොඩනැගුවහොත්, ස්වභාවිකව වේගවත් සහ කාර්යක්ෂම query ලිවීමට ආරම්භ කරයි.
මෙය තාක්ෂණික උපක්රමයක් පමණක් නොව — වෘත්තීය SQL පඬිම වර්ධනය කිරීමේ කොටසකි.
- විමසුමක් ලියූ පසු EXPLAIN ක්රියාත්මක කරන්න
- සැකසූ ක්රියාත්මක සැලසුම් වහාම සකස් කරන්න
- කාර්යක්ෂම ඉන්ඩෙක්ස් සැලසුම් සිතමින් නිර්මාණය කරන්න
මෙම චක්රය අත්පත් කරගත්තාම, ඔබේ MySQL කුසලතා ස්ථිරවම වැඩිවනු ඇත.
අපි බලාපොරොත්තු වෙමු මෙම ලිපිය ඔබේ හොඳ විමසුම් සුදුසුකම් කර ගැනීමට පළමු පියවරක් වන බව.
ඔබට ප්රශ්න තිබේ නම් හෝ අමතර විෂයයන් ගැන කතා කිරීමට අවශ්ය නම්, කරුණාකර අදහසක් තබන්න!


