MySQL තාවකාලික වගු: ඒවා කෙසේ ක්‍රියා කරයි, ප්‍රතිලාභ සහ හොඳම ක්‍රියාමාර්ග

目次

1. හැඳින්වීම

MySQL සමඟ වැඩ කරන විට, “තාවකාලික වගුව” යනු දත්ත තාවකාලිකව ගබඩා කර සැකසීමට ප්‍රයෝජනවත් ක්‍රමයකි. තාවකාලික වගු භාවිතා කිරීමෙන්, ඔබට දත්ත තාවකාලිකව රඳවා තබා සංකීර්ණ විමසුම් වල පූර්ණභාරය අඩු කර, කණ්ඩායම් සැකසීමේ කාර්යක්ෂමතාව වැඩි කළ හැකිය.

මෙම ලිපියේ, MySQL තාවකාලික වගු කුමක්ද, ඒවායේ භාවිතා කේස් සහ ප්‍රතිලාභ පිළිබඳව විස්තර කරනු ඇත.

තාවකාලික වගුවක් කියන්නේ කුමක්ද?

තාවකාලික වගුවක් යනු සැසිය තුළ පමණක් වලංගු වන වගුවකි.
සාමාන්‍ය වගු වලට වඩා, එය දත්ත ගබඩාවේ ස්ථිරව ගබඩා නොවේ, සහ සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි.

තාවකාලික වගු වල ප්‍රධාන ලක්ෂණ පහත පරිදි වේ:

  • ඇතුළත් සැසියකට පමණක් පවතී (වෙනත් සම්බන්ධතා වලින් ප්‍රවේශ නොහැක)
  • සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි
  • එකම නාමය ඇති සාමාන්‍ය වගුවක් පවතින විටත්, එය භාවිතා කළ හැක
  • කාර්යක්ෂමතාව වැඩි කිරීමට බොහෝවිට භාවිතා කරයි

තාවකාලික වගු දත්ත විශ්ලේෂණය සහ තාවකාලික දත්ත සැකසීම සඳහා සුදුසු වන අතර, කණ්ඩායම් සැකසීම සහ එකතු කිරීමේ කාර්යයන් සඳහා සහාය ලෙස සාමාන්‍යයෙන් භාවිතා වේ.

තාවකාලික වගු භාවිතා කිරීමේ ප්‍රතිලාභ

තාවකාලික වගු භාවිතා කිරීමෙන් දත්ත සැකසීම වැඩි කාර්යක්ෂම වේ. මෙහි ප්‍රධාන ප්‍රතිලාභ තුනක් ඇත.

1. විමසුම් කාර්යක්ෂමතාව වැඩි කිරීම

විශාල ප්‍රමාණයේ දත්ත සැකසීමේදී, බහු JOIN සහ උපවිමසුම් භාවිතා කිරීම සැකසීම සංකීර්ණ කර දත්ත ගබඩාවේ පූර්ණභාරය වැඩි කරයි. තාවකාලික වගු භාවිතා කිරීමෙන් දත්ත පෙර පිරික්සා ගබඩා කර, විමසුම් ක්‍රියාත්මක වේගය වැඩි කරයි.

2. තාවකාලික දත්ත ගබඩා කිරීම සඳහා සුදුසුකම

කණ්ඩායම් සැකසීම හෝ දත්ත පරිවර්තනයේදී, ඔබට දත්ත තාවකාලිකව ගබඩා කර අවශ්‍ය ක්‍රියාකාරකම් සිදු කළ යුතු වේ. තාවකාලික වගු ඔබට දත්ත තාවකාලිකව ගබඩා කර වේගවත් මතක-අභ්‍යන්තර සැකසීම සක්‍රිය කරයි.

3. පවතින දත්ත ආරක්ෂා කිරීම

නිෂ්පාදන දත්ත සෘජුවම වෙනස් කිරීම අවදානම්කාරී වේ. තාවකාලික වගු භාවිතා කිරීමෙන් නිෂ්පාදන දත්ත වෙනස් නොකර දත්ත සැකසිය හැකි අතර, දෝෂ අවදානම අඩු වේ.

සාරාංශය

MySQL තාවකාලික වගු තාවකාලික දත්ත ගබඩා කිරීම සහ සැකසීම සඳහා පහසු මෙවලමකි.

  • ඇතුළත් සැසියට සීමා කර ඇත සහ සැසිය අවසන් වන විට ඉවත් කරයි
  • කාර්යක්ෂමතාව වැඩි කිරීම සහ කණ්ඩායම් සැකසීම සඳහා ප්‍රයෝජනවත් වේ
  • නිෂ්පාදන දත්ත වෙනස් නොකර ආරක්ෂිත ක්‍රියාකාරකම් සිදු කිරීමට ඉඩ සලසයි

2. තාවකාලික වගු මූලික කරුණු

MySQL තාවකාලික වගු සාමාන්‍ය වගු වලට වඩා දත්ත තාවකාලිකව ගබඩා කිරීමට භාවිතා වේ. මෙම කොටසේ, “සාමාන්‍ය වගු වලින් වෙනස්කම්” සහ “අභ්‍යන්තර තාවකාලික වගු වලින් වෙනස්කම්” ඇතුළත් කර, තාවකාලික වගු මූලික සංකල්ප විස්තර කරමු.

තාවකාලික වගු සහ සාමාන්‍ය වගු අතර වෙනස්කම්

තාවකාලික වගු සහ සාමාන්‍ය වගු දත්ත රඳවා ගැනීම සහ ප්‍රවේශ හැසිරීම පිළිබඳව වැදගත් ලෙස වෙනස් වේ. පහත වගුව ප්‍රධාන වෙනස්කම් සාරාංශ කරයි.

ItemTemporary TableRegular Table
LifetimeDropped when the session endsExists until explicitly dropped
AccessAvailable only within the session (not visible to other connections)Shareable across all sessions
ConflictsCan be used even if a regular table with the same name existsCannot create another table with the same name
Storage locationMEMORY (default) or an InnoDB temporary areaStored in the database storage
PersistenceNone (dropped when the session ends)Yes (retained by the database)

ප්‍රධාන කරුණු

  • තාවකාලික වගු සැසියකට අනුව වෙන් කර ඇත සහ අනෙකුත් පරිශීලකයන්ට දෘශ්‍ය නොවේ.
  • එකම නාමය ඇති සාමාන්‍ය වගුවක් පවතින විටත්, දෝෂයක් නොමැතිව ඒවා නිර්මාණය කළ හැක .
  • ඒවා CREATE TEMPORARY TABLE භාවිතා කර ස්වයංක්‍රීයව සැසිය අවසන් වන විට ඉවත් කරයි.

තාවකාලික වගු සහ අභ්‍යන්තර තාවකාලික වගු අතර වෙනස්කම්

පරිශීලක-නිර්මාණය කරන තාවකාලික වගු වලට අමතරව, MySQL අභ්‍යන්තර තාවකාලික වගු ස්වයංක්‍රීයව නිර්මාණය කරයි. ඒවා සමාන ලෙස පෙනුනත්, ඒවායේ අරමුණ සහ කළමනාකරණය වෙනස් වේ.

ItemTemporary TableInternal Temporary Table
Creation methodExplicitly created using CREATE TEMPORARY TABLEAutomatically created by MySQL
PurposeCreated by the user for specific processingCreated by MySQL to process complex queries (GROUP BY, ORDER BY)
ScopeAvailable only within the sessionValid only while the query is executing
DeletionDropped when the session endsAutomatically dropped after the query completes

අභ්‍යන්තර තාවකාලික වගුවක් කියන්නේ කුමක්ද?

  • MySQL සමහර විමසුම් (උදා: GROUP BY, ORDER BY, DISTINCT) වැඩි දක්ෂතාවයක් ලබා දීමට අභ්‍යන්තර තාවකාලික වගු නිර්මාණය කරයි.
  • අවසන් පරිශීලකයන්ට ඒවා සෘජුවම කළමනාකරණය කළ නොහැක (ඔබ CREATE TEMPORARY TABLE වැනි විධානයෙන් ඒවා නිර්මාණය කළ නොහැක).
  • ඒවා විමසුම් ක්‍රියාත්මක වන විට අවශ්‍ය පරිදි නිර්මාණය කර විමසුම අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි.

අභ්‍යන්තර තාවකාලික වගු උත්පාදනය කළ හැකි උදාහරණයක්

ඔබ පහත පරිදි විමසුමක් ක්‍රියාත්මක කරන විට, MySQL එය සැකසීමට අභ්‍යන්තර තාවකාලික වගුවක් නිර්මාණය කරනු ඇත.

SELECT category, COUNT(*) 
FROM products 
GROUP BY category
ORDER BY COUNT(*) DESC;

මෙම අවස්ථාවේ, MySQL GROUP BY ප්‍රතිඵල තාවකාලිකව ගබඩා කිරීම සඳහා අභ්‍යන්තර තාවකාලික වගුවක් සෑදිය හැක,
ඉන්පසු එය අවසන් ප්‍රතිඵල ගණනය කිරීමට භාවිතා කරයි.

Summary

  • තාවකාලික වගුවක් යනු පරිශීලක-සෑදූ තාවකාලික වගුවකි, එය සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි.
  • සාමාන්‍ය වගු වලට වඩා, එය වෙනත් සැසි වලින් ප්‍රවේශය නොලබයි .
  • අභ්‍යන්තර තාවකාලික වගුවක් MySQL විසින් ස්වයංක්‍රීයව සෑදෙයි සහ ඉවත් කරයි, පරිශීලකයන් එය සෘජුව පාලනය කළ නොහැක.

3. තාවකාලික වගු සෑදීමේ ක්‍රමය

ඔබට CREATE TEMPORARY TABLE ප්‍රකාශනය භාවිතා කර MySQL තාවකාලික වගුවක් සෑදිය හැක. මෙම කොටසේ, මූලික සෑදීම සිට පවතින වගුවක් මත පදනම්ව එකක් සෑදීම දක්වා සියල්ල පැහැදිලි කරමු.

තාවකාලික වගුවක් සෑදීමේ මූලික ක්‍රමය

MySQL හි, ඔබ CREATE TEMPORARY TABLE භාවිතා කර තාවකාලික වගුවක් සෑදේ.

Basic syntax

CREATE TEMPORARY TABLE table_name (
    column_name data_type constraints,
    column_name data_type constraints,
    ...
);

උදාහරණ කේතය

පහත SQL කේතය users_temp නමින් තාවකාලික වගුවක් සෑදේ, එහි ත්‍රිත්ව තීරුවලින්: id (පූර්ණ සංඛ්‍යාව), name (ස්ට්‍රින්), සහ email (ස්ට්‍රින්).

CREATE TEMPORARY TABLE users_temp (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

මෙම වගුව සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වන බැවින්, එය ස්ථිර දත්ත ගබඩාවට බලපාන්නේ නැත.

පවතින වගුවක් මත පදනම්ව තාවකාලික වගුවක් සෑදීම

තාවකාලික වගුවක් මුල සිට සෑදීම වෙනුවට, ඔබට පවතින වගුවක ව්‍යුහය පිටපත් කර එකක් සෑදිය හැක.

CREATE TEMPORARY TABLE ... SELECT භාවිතා කිරීම

MySQL හි, ඔබට SELECT ප්‍රකාශනයක ප්‍රතිඵල මත පදනම්ව තාවකාලික වගුවක් සෑදිය හැක.

Basic syntax

CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;

උදාහරණ කේතය

උදාහරණයක් ලෙස, users වගුවේ දත්ත ව්‍යුහය පිටපත් කර නව තාවකාලික වගුව users_temp සෑදීමට, ඔබට මෙසේ ලියිය හැක:

CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;

මෙම ක්‍රමය භාවිතා කිරීමෙන්, users හි තීරු ව්‍යුහය users_temp වෙත ගෙන යයි, නමුත් PRIMARY KEY සහ INDEX වැනි සීමා පිටපත් නොවේ.

දත්ත ඇතුළත් නොකර වගුවේ ව්‍යුහය පමණක් පිටපත් කිරීමට, WHERE 1=0 එකතු කරන්න.

CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;

මෙම SQL සමඟ, users හි තීරු විස්තර පිටපත් වේ, නමුත් දත්ත කිසිවක් ඇතුළත් නොවේ.

තාවකාලික වගු සෑදීමේ සටහන්

1. තාවකාලික වගු සැසි-පරාසයයි

  • තාවකාලික වගුව එය සෑදූ සැසිය තුළ පමණක් වලංගු වේ.
  • එය වෙනත් සම්බන්ධතා හෝ වෙනත් පරිශීලකයන්ගෙන් ප්‍රවේශය නොලබයි.

2. එකම නාමයෙන් සාමාන්‍ය වගුවක් තිබුණත් ඔබට එය සෑදිය හැක

  • උදාහරණයක් ලෙස, දත්ත ගබඩාවේ users නමින් සාමාන්‍ය වගුවක් තිබුණත්, ඔබට users නමින් තාවකාලික වගුවක් සෑදිය හැක.
  • එම සැසියේ, තාවකාලික වගුවට ප්‍රමුඛත්වය ලැබේ සහ සාමාන්‍ය වගුව සඟවා ඇත.

3. ගබඩා එන්ජින් බලපෑම

  • පෙරනිමි ලෙස, තාවකාලික වගු MEMORY එන්ජින් භාවිතා කරයි, නමුත් දත්ත ප්‍රමාණය විශාල නම්, ඒවා InnoDB තාවකාලික ප්‍රදේශයක සුරක්ෂිත විය හැක.
  • MEMORY එන්ජින් නිශ්චිතව සඳහන් කිරීමට, මෙසේ ලියන්න: CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY;
  • MEMORY එන්ජින් වේගවත් නමුත් දත්ත ප්‍රමාණ සීමා ඇත. විශාල දත්ත කට්ටල සඳහා InnoDB භාවිතා කිරීම සලකා බලන්න.

සාරාංශය

  • CREATE TEMPORARY TABLE භාවිතා කර තාවකාලික වගු සෑදන්න.
  • පවතින වගුවක් ( SELECT * FROM ) පිටපත් කර එකක් සෑදිය හැක.
  • MEMORY එන්ජින් වේගවත් විය හැක, නමුත් විශාල දත්ත කට්ටල සඳහා InnoDB සාමාන්‍යයෙන් හොඳයි.
  • තාවකාලික වගු සැසිය අනුව කළමනාකරණය කරයි සහ සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ .

4. තාවකාලික වගු භාවිතා කිරීමේ ක්‍රමය

MySQL තාවකාලික වගු සාමාන්‍ය වගු වැනි ලෙස ක්‍රියාත්මක කළ හැකි අතර INSERT, UPDATE, DELETE, සහ SELECT ඇතුළත් වේ. මෙම කොටසේ, අපි එක් එක් මෙහෙයුම විස්තරාත්මකව පැහැදිලි කරමු.

දත්ත ඇතුළත් කිරීම

තාවකාලික වගුවකට දත්ත එක් කිරීමට, සාමාන්‍ය INSERT INTO ප්‍රකාශය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);

උදාහරණ කේතය

පහත SQL කේතය users_temp නමැති තාවකාලික වගුවකට දත්ත ඇතුළත් කරයි.

INSERT INTO users_temp (id, name, email)
VALUES (1, 'Taro Yamada', 'taro@example.com');

ඔබට පවතින වගුවකින් දත්ත පිටපත් කර ඇතුළත් කිරීමටත් හැකියාව ඇත.

INSERT INTO users_temp (id, name, email)
SELECT id, name, email FROM users WHERE age >= 18;

මෙම SQL කේතය users වගුවෙන් වයස 18 හෝ වැඩි පරිශීලකයන්ගේ දත්ත තාවකාලික වගුවට ඇතුළත් කරයි.

දත්ත යාවත්කාලීන කිරීම

තාවකාලික වගුවේ දත්ත වෙනස් කිරීමට, සාමාන්‍ය UPDATE ප්‍රකාශය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

UPDATE temp_table_name
SET column_name = new_value
WHERE condition;

උදාහරණ කේතය

උදාහරණයක් ලෙස, users_temp වගුවේ id=1 වන පරිශීලකයාගේ නාමය වෙනස් කිරීම සඳහා:

UPDATE users_temp
SET name = 'Ichiro Sato'
WHERE id = 1;

දත්ත මකා දැමීම

අවශ්‍ය නොවන දත්ත මකා දැමීමට, DELETE ප්‍රකාශය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

DELETE FROM temp_table_name WHERE condition;

උදාහරණ කේතය

උදාහරණයක් ලෙස, users_temp වගුවේ id=1 වන පේළිය මකා දැමීම සඳහා:

DELETE FROM users_temp WHERE id = 1;

සියලු දත්ත මකා දැමීමට WHERE කොටස නොදැමීම ප්‍රයෝජනවත් වේ.

DELETE FROM users_temp;

DELETE භාවිතා කිරීම වගුවම ඉවත් නොකර, දත්ත පමණක් මකා දැමෙන බව සලකන්න.

දත්ත ලබා ගැනීම

තාවකාලික වගුවේ සුරැකි දත්ත ලබා ගැනීමට, SELECT ප්‍රකාශය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

SELECT column_name FROM temp_table_name WHERE condition;

උදාහරණ කේතය

උදාහරණයක් ලෙස, users_temp වගුවේ සියලු දත්ත ලබා ගැනීම සඳහා:

SELECT * FROM users_temp;

විශේෂිත කොන්දේසියකට ගැළපෙන දත්ත ලබා ගැනීමට, WHERE කොටස භාවිතා කරන්න.

SELECT * FROM users_temp WHERE email LIKE '%@example.com';

මෙම SQL කේතය ඊමේල් ලිපිනය @example.com අඩංගු පේළි පමණක් ලබා ගනී.

තාවකාලික වගු භාවිතා කිරීමේ සටහන්

1. සැසිය අවසන් වන විට දත්ත ඉවත් වේ

  • තාවකාලික වගු සැසියකට අනුව කළමනාකරණය කරයි, සහ සැසිය අවසන් වන විට දත්තත් ඉවත් වේ .
  • දිගු කාලීන සැකසීම සඳහා, දත්ත නිතර පිටපත් කර ගැනීම සුපිරි .

2. එකම නාමයෙන් තාවකාලික වගුවක් නිර්මාණය කිරීමේදී දෝෂයක් සිදුවේ

  • CREATE TEMPORARY TABLE භාවිතා කර එකම නාමයෙන් තාවකාලික වගුවක් නිර්මාණය කිරීමට උත්සාහ කළහොත්, දෝෂයක් සිදුවේ .
  • දෝෂය වැළැක්වීමේ ක්‍රමයක් ලෙස, DROP TEMPORARY TABLE IF EXISTS ප්‍රකාශය පෙරම 실행 කරන්න. DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);

3. ගබඩා එන්ජින් සීමා

  • තාවකාලික වගු පෙරනිමි ලෙස MEMORY එන්ජින් භාවිතා කරයි, නමුත් විශාල දත්ත කට්ටල සඳහා ස්වයංක්‍රීයව InnoDB තාවකාලික ප්‍රදේශයකට ගබඩා විය හැක.
  • විශාල දත්ත කට්ටල සඳහා, InnoDB තාවකාලික වගුවක් භාවිතා කිරීම සුපිරි .

සාරාංශය

  • තාවකාලික වගු INSERT, UPDATE, DELETE, සහ SELECT සාමාන්‍ය වගු වැනි ලෙස ක්‍රියා කරයි.
  • සැසිය අවසන් වන විට, තාවකාලික වගුවේ දත්ත ස්වයංක්‍රීයව ඉවත් වේ .
  • DROP TEMPORARY TABLE IF EXISTS පෙරම 실행 කිරීම නාම ගැටළු දෝෂ වලින් වැළැක්වීමට උපකාරී වේ.
  • විශාල දත්ත කට්ටල සඳහා, InnoDB තාවකාලික වගුවක් භාවිතා කිරීම සුපිරි .

5. තාවකාලික වගු කළමනාකරණය සහ ඉවත් කිරීම

MySQL තාවකාලික වගු සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ. කෙසේ වෙතත්, සමහර අවස්ථාවලදී ඔබට ඒවා පැහැදිලිව ඉවත් කිරීමට අවශ්‍ය විය හැක. මෙම කොටසේ, තාවකාලික වගු කළමනාකරණය සහ ඉවත් කිරීම පිළිබඳව පැහැදිලි කරමු.

තාවකාලික වගුවක් ඉවත් කිරීමේ ක්‍රමය

පැහැදිලිව තාවකාලික වගුවක් ඉවත් කිරීමට, DROP TEMPORARY TABLE ප්‍රකාශය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

DROP TEMPORARY TABLE table_name;

උදාහරණ කේතය

For example, to drop a temporary table named users_temp, run:

DROP TEMPORARY TABLE users_temp;

After running this SQL, the users_temp table is removed and can no longer be used in the session.

Automatic drop when the session ends

A temporary table is automatically dropped when the session ends.

How automatic drop works

  1. CREATE TEMPORARY TABLE භාවිතයෙන් තාවකාලික වගුවක් සාදන්න
  2. සැසිය සක්‍රිය වන අතර එහි දත්ත මත ක්‍රියා කරන්න
  3. සැසිය (සම්බන්ධතාවය) වසා දැමූ විට, තාවකාලික වගුව ස්වයංක්‍රීයව ඉවත් කරයි

කෙසේ වෙතත්, පහත අවස්ථා වලදී සැලකිල්ලෙන් සිටින්න:

  • සැසි දිගු කාලයක් විවෘතව සිටින විට → අවශ්‍ය නොවන තාවකාලික වගු මතකය භාරගත හැකි බැවින්, අවශ්‍ය පරිදි DROP TEMPORARY TABLE ධාවනය කිරීම සුපාරිශීලී වේ.
  • විශාල ප්‍රමාණයේ දත්ත සැකසීමේදී → ගබඩා පීඩනය වැළැක්වීමට, වගු නිසි ලෙස ඉවත් කිරීම වැදගත් වේ.

DROP TEMPORARY TABLE IF EXISTS භාවිතය

ඇති නොවිය හැකි වගුවක් ඉවත් කිරීමේදී දෝෂ වැළැක්වීමට, ඔබට IF EXISTS භාවිත කළ හැක.

මූලික ව්‍යුහය

DROP TEMPORARY TABLE IF EXISTS table_name;

උදාහරණ කේතය

DROP TEMPORARY TABLE IF EXISTS users_temp;

මෙම SQL users_temp වගුව තිබේ නම් ඉවත් කරයි; එය නොතිබේ නම්, දෝෂයක් නොදැක්වෙයි.

පොදු දෝෂ සහ විසඳුම්

දෝෂය 1: “වගුව හමු නොවීය”

එය සිදුවන විට:

  • ඔබ DROP TEMPORARY TABLE භාවිතයෙන් නොතිබෙන වගුවක් ඉවත් කිරීමට උත්සාහ කරන විට
  • තාවකාලික වගු සැසිය-සීමා ඇති බැවින්, ඔබට වෙනත් සැසියකින් ඒවා ඉවත් කළ නොහැක

විසඳුම:

  • IF EXISTS එකතු කර දෝෂය වැළැක්වන්න
    DROP TEMPORARY TABLE IF EXISTS users_temp;
    
  • නිවැරදි සැසිය තුළ එය ඉවත් කරන්න

දෝෂය 2: “වගුව දැනටමත් පවතී”

එය සිදුවන විට:

  • ඔබ දැනටමත් පවතින නාමයක් සමඟ තාවකාලික වගුවක් සාදීමට උත්සාහ කරන විට

විසඳුම:

  • පෙර DROP TEMPORARY TABLE IF EXISTS ධාවනය කරන්න
    DROP TEMPORARY TABLE IF EXISTS users_temp;
    CREATE TEMPORARY TABLE users_temp (
        id INT PRIMARY KEY,
        name VARCHAR(50),
        email VARCHAR(100)
    );
    

තාවකාලික වගු කළමනාකරණය සඳහා හොඳ පුරුදු

  1. ඔබට තවත් අවශ්‍ය නොවන විට ඒවා පැහැදිලිව ඉවත් කරන්න
    * අවශ්‍ය පරිදි DROP TEMPORARY TABLE ධාවනය කර අනිවාර්ය නොවන වගු නිදහස් කරන්න.

  2. දෝෂ වැළැක්වීමට IF EXISTS භාවිත කරන්න
    * DROP TEMPORARY TABLE IF EXISTS නොතිබෙන වගුවක් ඉවත් කිරීමේදී දෝෂ වැළැක්වයි.

  3. සැසි කළමනාකරණය ගැන සැලකිල්ලෙන් සිටින්න
    * දිගුකාලීන සැසි තාවකාලික වගු මතකය භාරගත හැකි බැවින්, අවශ්‍ය පරිදි ඒවා ඉවත් කරන්න.

  4. ගබඩා එන්ජින් බලපෑම තේරුම් ගන්න
    * MEMORY එන්ජින් වේගවත් නමුත් දත්ත ප්‍රමාණ සීමා ඇත.
    * ඔබ InnoDB භාවිතා කරනවා නම්, තැටි ඉඩ භාවිතය ගැන සැලකිල්ලෙන් සිටිය යුතුය.

සාරාංශය

  • ඔබට DROP TEMPORARY TABLE භාවිතයෙන් තාවකාලික වගු පැහැදිලිව ඉවත් කළ හැක.
  • සැසිය අවසන් වන විට ඒවා ස්වයංක්‍රීයව ඉවත් වේ, නමුත් දිගුකාලීන සැසි සඳහා අතිරේක පිරිසිදු කිරීම සුපාරිශීලී වේ.
  • DROP TEMPORARY TABLE IF EXISTS ඉවත් කිරීමේදී දෝෂ වැළැක්වීමට උපකාරී වේ.
  • “වගුව හමු නොවීය” සහ “වගුව දැනටමත් පවතී” දෝෂයන් කෙසේ හසුරවන්නේද යන්න දැන ගැනීම ප්‍රයෝජනවත් වේ.

6. තාවකාලික වගු සඳහා ප්‍රායෝගික භාවිත කේස්

MySQL තාවකාලික වගු තාවකාලික දත්ත ගබඩා කිරීම සහ සැකසීම වැඩි කාර්යක්ෂමතාවක් ලබා දීමට භාවිතා වේ. මෙම කොටසේ, තාවකාලික වගු ප්‍රයෝජනවත් වන සාමාන්‍ය අවස්ථා හඳුන්වා දී, ක්‍රියාත්මක කිරීමේ විස්තර පැහැදිලි කරමු.

1. එකතු කිරීම සඳහා මැද වගුවක් ලෙස භාවිතය

දත්ත විශ්ලේෂණය සහ වාර්තා නිර්මාණය කිරීමේදී, විශාල දත්ත කට්ටලයන් සෘජුවම සැකසීම විමසුම් ක්‍රියාත්මක වේගය අඩු කරයි. තාවකාලික වගුවක් භාවිතා කිරීමෙන්, පළමුව දත්ත සංවිධානය කර, පසුදා ඒවා සැකසීමෙන් කාර්යක්ෂමතාවය වැඩි කරයි.

දෘශ්‍යාවලිය

  • sales වගුවේ එක් වසරක විකුණුම් දත්ත අඩංගු වේ.
  • ඔබට මාසික මුළු විකුණුම් ගණනය කර, අතිරේක විශ්ලේෂණයක් කිරීමට අවශ්‍යයි.

උදාහරණ ක්‍රියාත්මක කිරීම

CREATE TEMPORARY TABLE monthly_sales (
    month_year DATE,
    total_sales DECIMAL(10,2)
);

INSERT INTO monthly_sales (month_year, total_sales)
SELECT DATE_FORMAT(sale_date, '%Y-%m-01') AS month_year, SUM(amount) 
FROM sales
GROUP BY month_year;

SELECT * FROM monthly_sales;

2. Keeping temporary data for batch processing

Temporary tables are also useful for batch processing (bulk operations). For example, you can filter data by certain conditions and store only the target data in a temporary table to operate efficiently.

Scenario

  • From the users table, you want to email only users who have logged in within the last year .
  • You store the target data in a temporary table first, then process it sequentially.

Example implementation

CREATE TEMPORARY TABLE active_users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(255)
);

INSERT INTO active_users
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;

SELECT * FROM active_users;

3. Simplifying complex queries

Running complex queries directly can reduce performance and hurt readability. By using temporary tables, you can reduce subqueries and keep SQL simpler.

Scenario

  • You want to get the top 10 best-selling products from the orders table.
  • You want to avoid using subqueries by leveraging a temporary table.

Example implementation

CREATE TEMPORARY TABLE top_products AS
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;

SELECT * FROM top_products;

4. Temporary operations without needing rollback

Temporary tables are managed per session and are not affected by transactions. This makes them suitable for managing temporary data where rollback is not desired.

Scenario

  • During a transaction, you want to keep temporary calculation results .
  • But you want to avoid temporary data being rolled back on errors.

Example implementation

START TRANSACTION;

CREATE TEMPORARY TABLE temp_results (
    user_id INT,
    score INT
);

INSERT INTO temp_results
SELECT user_id, SUM(points) FROM game_scores GROUP BY user_id;

-- Commit the transaction
COMMIT;

SELECT * FROM temp_results;

Summary

  • Temporary tables can be used for aggregation, batch processing, and simplifying queries across many scenarios.
  • Using them as an intermediate table can improve performance and help organize data.
  • For batch processing , pre-extracting only target data helps avoid unnecessary work.
  • For simplifying complex queries , reducing subqueries improves readability.
  • Because they are not affected by transactions , they can be used for temporary data where rollback is not needed.

7. Alternatives and Limitations of Temporary Tables

MySQL temporary tables are useful, but they have some limitations. In some cases, using alternatives such as views or subqueries can provide more efficient data processing. In this section, we explain the main limitations of temporary tables and alternative approaches to work around them.

Main limitations of temporary tables

Temporary tables have several limitations that regular tables do not. Understanding these helps you choose appropriate use cases.

1. Session-scoped

  • A temporary table is valid only within the session where it was created, and cannot be accessed by other connections or users .
  • Even if a regular table with the same name exists, the temporary table takes precedence within the session (the regular table is not accessible).

2. The schema is not retained

  • Regular tables can be inspected with SHOW CREATE TABLE , but a temporary table disappears when the session ends , so its schema is not retained.

3. Index limitations

  • ඔබ CREATE TEMPORARY TABLE තුළ PRIMARY KEY හෝ INDEX නිරූපණය නොකළහොත්, ඒවා ස්වයංක්‍රීයව නිර්මාණය නොවේ.
  • තාවක වගුවකට ඉන්ඩෙක්ස් අවශ්‍ය නම්, ඔබට ඒවා අතින් නිර්මාණය කළ යුතුය.

4. පෙරනිමි ගබඩා එන්ජින් MEMORY

  • MEMORY එන්ජින් සමඟ, දත්ත ප්‍රමාණය විශාල වීම නිසා තැටියට ස්වෑප් වීම සහ කාර්ය සාධනය අඩුවීම සිදු විය හැක.
  • InnoDB නිරූපණය කළහොත්, එය විශාල දත්ත හසුරවිය හැකි නමුත් තැටියේ භාවිතය වැඩි වේ.

5. ගනුදෙනු වලින් බලපෑම නොලැබේ

  • තාවක වගු ROLLBACK මගින් බලපෑම නොලැබේ.
  • ඒ නිසා, දැඩි ගනුදෙනු අඛණ්ඩතාව අවශ්‍ය වන සැකසුම් සඳහා ඒවා සුදුසු නොවේ.

තාවක වගු සඳහා විකල්ප

මෙම සීමා වලින් මිදීමට, තාවක වගු වෙනුවට දෘශ්‍ය (views) හෝ උපවිමසුම් (subqueries) භාවිතා කරමින් වඩා ලවච්චි දත්ත සැකසුම් කළ හැක.

1. දෘශ්‍යයක් (view) භාවිතා කරන්න

දෘශ්‍යයක් තාවක දත්ත යොමු කිරීම සඳහා තාවක වගු මෙන්ම භාවිතා කළ හැක. දෘශ්‍යයක් අතථ්‍ය වගුවක් ලෙස ක්‍රියා කරයි සහ තාවක දත්ත ගබඩා කිරීම අවශ්‍ය නොවේ, එය ගබඩා සීමා වලින් මිදීමට උපකාරී වේ.

දෘශ්‍යයක් නිර්මාණය කරන්න

CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;

දෘශ්‍යය භාවිතා කරන්න

SELECT * FROM active_users;
දෘශ්‍යයක් භාවිතා කිරීමේ වාසි

ගබඩා භාවිතය නොමැත (දත්ත සෘජුව යොමු කරයි, තාවක ගබඩා කිරීම අවශ්‍ය නොවේ)
සැසියට පරාමිතිය නොවේ (වෙනත් පරිශීලකයන් සහ සම්බන්ධතා සඳහා ලබා ගත හැක)
ස්කීමා රඳවා ගත හැක (SHOW CREATE VIEW භාවිතයෙන් විවරණය සමාලෝචනය කළ හැක)

දෘශ්‍යයක් භාවිතා කිරීමේ අවාසි

යාවත්කාලීන කිරීම අමාරුයි (දෘශ්‍යය මත සෘජු INSERT හෝ UPDATE සීමා කර ඇත)
විශාල දත්ත කට්ටල සඳහා කාර්ය සාධනය අඩුවිය හැක

2. උපවිමසුමක් (subquery) භාවිතා කරන්න

තාවක වගුවක් නොනිර්මාණය කර තාවක දත්ත සැකසීමට උපවිමසුමක් භාවිතා කළ හැක.

තාවක වගුවක් භාවිතා කිරීම

CREATE TEMPORARY TABLE top_products AS
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;

SELECT * FROM top_products;

උපවිමසුමක් භාවිතා කිරීම

SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
උපවිමසුමක් භාවිතා කිරීමේ වාසි

තාවක වගුවක් නිර්මාණය නොකළ නිසා වැඩි කාර්ය සාධනය
ගබඩා භාවිතය නොමැත
සැසියට පරාමිතිය නොවේ සහ ඕනෑම වේලාවක ක්‍රියාත්මක කළ හැක

උපවිමසුමක් භාවිතා කිරීමේ අවාසි

සංකීර්ණ විමසුම් සඳහා කියවීමේ හැකියාව අඩුවිය හැක
දත්ත නැවත භාවිතා කිරීම අමාරුයි (එකම දත්ත නැවත නැවත යොමු කළ යුතු විය හැක)

3. CTE (WITH වාක්‍ය) භාවිතා කරන්න

MySQL 8.0 සහ පසුගිය අනුවාදවල, CTE (සාමාන්‍ය වගු ප්‍රකාශනය) භාවිතා කර තාවක වගුවක් නොනිර්මාණය කර දත්ත තාවක ලෙස හසුරවිය හැක.

CTE උදාහරණය

WITH top_products AS (
    SELECT product_id, SUM(amount) AS total_sales
    FROM orders
    GROUP BY product_id
    ORDER BY total_sales DESC
    LIMIT 10
)
SELECT * FROM top_products;
CTE භාවිතා කිරීමේ වාසි

කියවීමේ හැකියාව වැඩි කරයි (උපවිමසුම් වලට වඩා කියවීමට පහසු වේ)
කාර්ය සාධනය උත්පාදනය කළ හැක (තාවක වගුවක් නොනිර්මාණය කර තාවක-ශෛලී සැකසුම)

CTE භාවිතා කිරීමේ අවාසි

MySQL 5.x හි ලබා නොදේ (MySQL 8.0 සහ පසුගිය අනුවාදවල පමණක් සහය දක්වයි)

සාරාංශය

MethodProsCons
Temporary tableGood for session-scoped data processingConsumes storage and disappears when the session ends
ViewNo storage usage, not session-dependentHard to update, possible performance degradation
SubqueryNo storage usage, simpleHard to reuse, reduced readability
CTE (WITH)Better readability, performance optimizationAvailable only in MySQL 8.0+

8. FAQ

MySQL තාවක වගු පිළිබඳ නිතර අසන ප්‍රශ්න මෙහි ඇත. ඒවා කෙසේ ක්‍රියා කරයි සහ ඒවායේ සීමා කුමනද යන්න පැහැදිලි කිරීමට මෙය උපකාරී වේ කියා අපි බලාපොරොත්තු වෙමු.

1. තාවක වගු වෙනත් සැසි වලින් යොමු කළ හැකිද?

නැත, ඒවා කළ නොහැක.
තාවක වගුව එය නිර්මාණය කරන ලද සැසිය තුළ පමණක් ලබා ගත හැක. වෙනත් සැසි ඒවාට ප්‍රවේශ විය නොහැක. වෙනත් පරිශීලකයෙකු එකම නාමයෙන් තාවක වගුවක් නිර්මාණය කළාමත්, සෑම සැසියක්ම ඒවා ස්වතන්ත්‍ර වගුවක් ලෙස සලකයි.

2. තාවක වගු නිර්මාණය කිරීමට අවශ්‍ය අවසර මොනවාද?

තාවකාලික වගු සාදන්න, දත්ත සමුදායේ CREATE TEMPORARY TABLES හිමිකම අවශ්‍ය වේ.
පරිශීලකයෙකුට හිමිකම ලබා දීම සඳහා, පහත SQL ධාවනය කරන්න:

GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';

දැනට ඇති හිමිකම් පරීක්ෂා කිරීමට SHOW GRANTS භාවිතා කළ හැකිය.

SHOW GRANTS FOR 'user_name'@'host';

3. තාවකාලික වගු මගින් ඩිස්ක් භාවිතයට බලපෑම් කළ හැකිද?

ඔව්, ඒවාට හැකිය.
නිසිතින්, MySQL තාවකාලික වගු MEMORY එන්ජින් භාවිතා කරයි, නමුත් දත්ත ප්‍රමාණය නිශ්චිත ප්‍රමාණයකට වඩා වැඩි වන විට, ඒවා InnoDB තාවකාලික ප්‍රදේශයක සංරක්ෂණය වේ.

විශාල දත්ත සෙට් සමඟ වැඩ කරන විට, තාවකාලික වගු ඩිස්ක් අවකාශ භාවිතා කළ හැකිය. එබැවින්, ඒවා තවදුරටත් අවශ්‍ය නොවන විට ඒවා පැහැර හැරීම උපදෙස් කෙරේ.

DROP TEMPORARY TABLE IF EXISTS table_name;

ඩිස්ක් බලපෑම අවම කිරීම සඳහා, විශාල දත්ත ප්‍රමාණයක් අපේක්ෂා කරන්නේ නම්, MEMORY වෙනුවට InnoDB සමඟ තාවකාලික වගුව සාදන්න.

CREATE TEMPORARY TABLE table_name (
    column1 data_type,
    column2 data_type
) ENGINE=InnoDB;

4. තාවකාලික වගුවක් සහ අභ්‍යන්තර තාවකාලික වගුව අතර වෙනස කුමක්ද?

ItemTemporary tableInternal temporary table
Creation methodCreated by the user with CREATE TEMPORARY TABLEAutomatically created by MySQL during processing such as GROUP BY
ScopeOnly within the creating sessionOnly during query execution
DeletionExplicitly dropped with DROP TEMPORARY TABLEAutomatically dropped when the query completes

5. තාවකාලික වගු තුනි වගවන් අතර බෙදා හරින්නට හැකිද?

නැහැ, ඒවාට නොහැකිය.
තාවකාලික වගුවක් එය සාදන තුනි වගව (සැසිය) තුළ පමණක් වලංගු වේ, සහ එය අනෙකුත් තුනි වගවන් හෝ ක්‍රියාවලිවලින් ප්‍රවේශ විය නොහැක.

සැසි/තුනි වගවන් අතර දත්ත බෙදා හරින්නට අවශ්‍ය නම්, සාමාන්‍ය වගුවක් සාදන්න ඔබට සිදු වේ.

CREATE TABLE shared_temp_table (
    id INT PRIMARY KEY,
    data VARCHAR(255)
);

6. තාවකාලික වගු ක්‍රියාකාරිත්වය අඩු කළ හැකිද?

ඔව්, සමහර අවස්ථාවලදී.
විශේෂයෙන්, පහත තත්ත්වයන්හි සැලකිලිමත් වන්න:

  • දත්ත ප්‍රමාණය ඕනෑවට වඩා විශාල වන විට
  • MEMORY එන්ජින්හි ප්‍රමාණ සීමාවන් ඇත; ඊට අධික වූ විට, දත්ත InnoDB වෙත මාරු විය හැකි අතර, එය ක්‍රියාකාරිත්වය අඩු කළ හැකිය .
  • විසඳුම: MEMORY සීමාවන් ඉක්මවා යාම අපේක්ෂා කරන්නේ නම්, ආරම්භයේ සිට InnoDB සමඟ වගුව සාදන්න.
  • ගැලපෙන සුදුසු සුචි නොමැති විට
  • CREATE TEMPORARY TABLE ... SELECT සමඟ සාදන ලද වගු සුචි පිටපත් නොකරයි , එබැවින් සෙවීම් මන්දගාමී විය හැකිය.
  • විසඳුම: අවශ්‍ය පරිදි ALTER TABLE භාවිතා කර සුචි එකතු කරන්න.
    ALTER TABLE temp_table_name ADD INDEX (column_name);
    

7. තාවකාලික වගු ක්‍රියාකාරිත්වය වැඩිදියුණු කිරීමට මට කළ හැකිද?

තාවකාලික වගු ක්‍රියාකාරිත්වය වැඩිදියුණු කිරීම සඳහා, පහත ප්‍රවේශයන් ඵලදායී වේ:

MEMORY එන්ජින් භාවිතා කරන්න (කුඩා දත්ත සෙට් සඳහා වේගවත්)

CREATE TEMPORARY TABLE table_name (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MEMORY;

අවශ්‍ය කොලම් පමණක් තෝරන්න (අනවශ්‍ය කොලම් නොගන්න)

CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;

ගැලපෙන සුචි එකතු කරන්න (සෙවීම් වේගවත් කරන්න)

ALTER TABLE users_temp ADD INDEX (name);

එය තවදුරටත් අවශ්‍ය නොවන විට එය පැහැර හරින්න (මතකය නිදහස් කරන්න)

DROP TEMPORARY TABLE IF EXISTS users_temp;

සාරාංශය

  • තාවකාලික වගු අනෙකුත් සැසි හෝ තුනි වගවන්වලින් ආශ්‍රිත විය නොහැක
  • ඒවා සාදන්න CREATE TEMPORARY TABLES හිමිකම අවශ්‍ය වේ
  • දත්ත ඕනෑවට වඩා විශාල වන විට, MySQL MEMORY වෙතින් InnoDB වෙත මාරු විය හැකි අතර, එය ක්‍රියාකාරිත්වය අඩු කළ හැකිය
  • ගැලපෙන සුචි එකතු කිරීම මගින් විමසීම් වේගවත් කළ හැකිය
  • තාවකාලික වගු තවදුරටත් අවශ්‍ය නොවන විට DROP TEMPORARY TABLE සමඟ ඒවා පැහැර හැරීම උපදෙස් කෙරේ

මෙය MySQL තාවකාලික වගු පිළිබඳ විස්තරාත්මක පැහැදිලි කිරීමක් අවසන් කරයි, මූලික සංකල්ප සිට භාවිත අවස්ථා, සීමාවන්, විකල්ප සහ ප්‍රශ්න සහ පිළිතුරු දක්වා.
තාවකාලික වගු සුදුසු ලෙස භාවිතා කිරීමෙන්, ඔබට දත්ත සැකසීමේ කාර්යක්ෂමතාව බොහෝ දුරට වැඩිදියුණු කළ හැකිය.