எப்படி MySQL நகல் வரிசைகளை நீக்குகிறது

How Mysql Delete Duplicate Rows



MySQL என்பது ஒரு தொடர்புடைய தரவுத்தொகுப்பாகும், இது வரிசைகள் மற்றும் நெடுவரிசைகளைக் கொண்ட அட்டவணையில் தரவைச் சேமிக்கிறது. இருப்பினும், தரவுத்தளத்தில் சேமிக்கப்பட்ட தரவு பயன்பாடுகள் அல்லது பயனர்களில் பிழைகளால் ஏற்படும் நகல் மதிப்புகளைக் கொண்டிருக்கலாம்.

இந்த டுடோரியலில், தரவுத்தள அளவைக் குறைக்கவும் சேவையகத்தின் செயல்திறனை அதிகரிக்கவும் ஒரு MySQL தரவுத்தளத்தில் நகல் வரிசைகளை எவ்வாறு அகற்றுவது என்பதைக் கற்றுக்கொள்வோம்.







நாங்கள் தொடர்வதற்கு முன், நாங்கள் கருதுகிறோம்:



  1. உங்கள் கணினியில் MySQL நிறுவப்பட்டு இயங்குகிறது
  2. தரவுத்தளத்திற்கு உங்களுக்கு ரூட் அணுகல் உள்ளது.
  3. சோதனை அல்லது சோதனைக்கு ஒரு தரவுத்தளத்தை அணுகலாம்

குறிப்பு : இந்த வழிகாட்டியில் வழங்கப்பட்ட கருத்துகளை முயற்சிக்க உங்களுக்கு ஒரு மாதிரி தரவுத்தளம் தேவைப்பட்டால், தயவுசெய்து சகிலா தரவுத்தளத்தைக் கருத்தில் கொள்ளவும் அல்லது இந்த வழிகாட்டியில் பயன்படுத்தப்படும் தரவுத்தளத்தின் நகலைப் பதிவிறக்கவும்.



ஆதாரங்கள் கீழே கொடுக்கப்பட்டுள்ளன:





அடிப்படை பயன்பாடு

நாங்கள் தொடங்குவதற்கு முன், வேண்டுமென்றே சோதனை நோக்கங்களுக்காக நகல் மதிப்புகள் அடங்கிய அட்டவணையை உருவாக்குவோம். இந்த செயலைச் செய்வதற்கான SQL வினவல்கள் கீழே உள்ளன:

பயன்படுத்தவும் உலகம்;
கைவிட மேசை IF ஆய்வுகள் பயனர்கள்;
உருவாக்கு மேசை பயனர்கள்(ஐடி INT முதன்மை கீ இல்லை ஏதுமில்லை AUTO_INCREMENT ,பயனர்பெயர் வர்சார் (10) இல்லை ஏதுமில்லை ,முழு பெயர் வர்சார் (இருபது),மின்னஞ்சல் வர்சார் (255) இல்லை ஏதுமில்லை );
செருகவும் INTO பயனர்கள்(பயனர்பெயர்,முழு பெயர்,மின்னஞ்சல்) மதிப்புகள்
('கன்னி', 'கிளாட் எம். மோரி', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]'),
('அச்சகம்', 'டிஃப்பனி ஜி. பெய்லி', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]'),
('ராக்கெட்', 'கிறிஸ்டோபர் எஸ். பேடன்', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]'),
('இருண்ட பொருள்', 'பாட்ரிசியா ஜே. ஃபாக்ஸ்', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]'),
('பொருள்', 'ஃபே எச். ஹார்ட்லி', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]'),
('இருண்ட பொருள்', 'பாட்ரிசியா ஜே. ஃபாக்ஸ்', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]'),
('ராக்கெட்', 'கிறிஸ்டோபர் எஸ். பேடன்', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]'),
('ஆர்டெமிஸ்', 'வெஸ்லி சி. டில்லார்ட்', '[மின்னஞ்சல் பாதுகாக்கப்பட்டது]');

உங்கள் தேவைகளுக்கு ஏற்ப மேலே உள்ள வினவலை மாற்ற தயங்க. பிழைகளைத் தவிர்க்க தரவுத்தளத்தை (உலகம்) உருவாக்கியுள்ளீர்கள் என்பதையும் உறுதி செய்ய வேண்டும்.



இப்போது, ​​எல்லா தரவையும் அட்டவணையில் வைத்து, பயனர்பெயர் மூலம் வரிசைப்படுத்தினால், காட்டப்பட்டுள்ளபடி எங்களிடம் உள்ள நகல்களைக் காண்போம்:

mysql> பயன்படுத்த உலகம்;
தரவுத்தளம் மாற்றப்பட்டது
mysql> தேர்ந்தெடுக்கவும் * இருந்து பயனர்கள் உத்தரவின் படி பயனர்பெயர்;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|ஐடி|பயனர்பெயர்|முழு பெயர்|மின்னஞ்சல்|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |ஆர்டெமிஸ்|வெஸ்லி சி. டில்லார்ட்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 4 |இருண்ட பொருள்|பாட்ரிசியா ஜே. ஃபாக்ஸ்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 6 |இருண்ட பொருள்|பாட்ரிசியா ஜே. ஃபாக்ஸ்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 2 |அச்சகம்|டிஃப்பனி ஜி. பெய்லி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 5 |பொருள்|ஃபே எச். ஹார்ட்லி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 3 |ராக்கெட்|கிறிஸ்டோபர் எஸ். பேடன்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 7 |ராக்கெட்|கிறிஸ்டோபர் எஸ். பேடன்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 1 |கன்னி|கிளாட் எம். மோரி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

மேலே உள்ள அட்டவணையில் இருந்து நீங்கள் பார்க்க முடியும் என, எங்களிடம் இரண்டு நகல் மதிப்புகள் உள்ளன, அவை எந்த காரணமும் இல்லாமல் தரவுத்தளத்தை பெரிதாக்குகின்றன மற்றும் மெதுவான வேகத்தை ஏற்படுத்துகின்றன.

இந்த மதிப்புகளை எவ்வாறு அகற்றுவது என்பதை இப்போது கற்றுக்கொள்வோம்.

#1 - இணைப்பை நீக்கு

ஒரு தரவுத்தளத்தில் நகல் வரிசைகளை அகற்றுவதற்கான ஒரு வழி MySQL டெலிட் ஜாயின் அறிக்கையைப் பயன்படுத்துவது. இருப்பினும், வினவல் நகல் மதிப்புகளை அகற்ற ஐடிகளைப் பயன்படுத்துகிறது.

எடுத்துக்காட்டாக, மேலே உள்ள பயனர்களின் அட்டவணையில் உள்ள நகல் மதிப்புகளை அகற்ற, நாம் உள்ளீடு செய்யலாம்:

அழி அட்டவணை 1 இருந்து பயனர்கள் அட்டவணை 1 இன்னர் சேர் பயனர்கள் அட்டவணை 2 எங்கே அட்டவணை 1. ஐடி<அட்டவணை 2. ஐடி மற்றும் அட்டவணை 1 மின்னஞ்சல்=அட்டவணை 2 மின்னஞ்சல்;

மேலே உள்ள வினவலை நீங்கள் செயல்படுத்தியவுடன், கீழே உள்ள வெளியீட்டில் காட்டப்பட்டுள்ளபடி நகல் மதிப்புகளை அகற்றுவீர்கள்:

mysql> அழி அட்டவணை 1 இருந்து பயனர்கள் அட்டவணை 1 இன்னர் சேர் பயனர்கள் அட்டவணை 2 எங்கே அட்டவணை 1. ஐடி<அட்டவணை 2. ஐடி மற்றும் அட்டவணை 1 மின்னஞ்சல்=அட்டவணை 2 மின்னஞ்சல்;
கேள்வி சரி, 2வரிசைகள் பாதிக்கப்பட்டுள்ளன(0.01நொடி)

mysql> தேர்ந்தெடுக்கவும் * இருந்து பயனர்கள் உத்தரவின் படி பயனர்பெயர்;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|ஐடி|பயனர்பெயர்|முழு பெயர்|மின்னஞ்சல்|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |ஆர்டெமிஸ்|வெஸ்லி சி. டில்லார்ட்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 6 |இருண்ட பொருள்|பாட்ரிசியா ஜே. ஃபாக்ஸ்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 2 |அச்சகம்|டிஃப்பனி ஜி. பெய்லி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 5 |பொருள்|ஃபே எச். ஹார்ட்லி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 7 |ராக்கெட்|கிறிஸ்டோபர் எஸ். பேடன்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 1 |கன்னி|கிளாட் எம். மோரி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

#2 - வரிசை எண் () செயல்பாடு

நாம் செயல்படுத்தக்கூடிய இரண்டாவது முறை MySQL row_number () செயல்பாட்டைப் பயன்படுத்துவதாகும். இந்த செயல்பாடு MySQL பதிப்பு 8 மற்றும் அதற்கு மேல் ஆதரிக்கப்படுகிறது.

ஒவ்வொரு வரிசைக்கும் தொடர்ச்சியான முழு மதிப்பை வழங்குவதன் மூலம் இது செயல்படுகிறது, நகல் மதிப்புகள் கொண்ட வரிசைகள் 1 ஐ விட அதிக மதிப்பைப் பெறுகின்றன.

இந்த செயல்பாடு பற்றி மேலும் அறிய, கீழே கொடுக்கப்பட்டுள்ள வளத்தைப் பயன்படுத்தவும்:

https://dev.mysql.com/doc/refman/8.0/en/window-function-description.html#function_row-number

நகல் மதிப்புகளுடன் வரிசைகளின் ஐடியை வழங்கும் கீழே உள்ள வினவலைக் கவனியுங்கள்:

தேர்ந்தெடுக்கவும் ஐடி இருந்து ( தேர்ந்தெடுக்கவும் ஐடி,ROW_NUMBER()மேல்( பங்கு பயனர் பெயர் மூலம் உத்தரவின் படி பயனர்பெயர்) AS வரிசை_வர் இருந்து பயனர்கள்)t1 எங்கே வரிசை_வர்> 1;

மேலே உள்ள வினவலை நீங்கள் செயல்படுத்தியவுடன், கீழே உள்ள வெளியீட்டில் காட்டப்பட்டுள்ளபடி ஐடியின் பட்டியலைப் பெற வேண்டும்:

+ ---- +
|ஐடி|
+ ---- +
| 6 |
| 7 |
+ ---- +
2வரிசைகள் இல் அமை (0.01நொடி)

நீங்கள் மதிப்புகளை அகற்ற விரும்பினால், கீழே உள்ளபடி தேர்ந்தெடுக்கப்பட்ட அறிக்கையை நீக்கு அறிக்கையுடன் மாற்றவும்:

அழி இருந்து பயனர்கள் எங்கே ஐடி IN ( தேர்ந்தெடுக்கவும் ஐடி இருந்து ( தேர்ந்தெடுக்கவும் ஐடி,ROW_NUMBER()மேல்( பங்கு பயனர் பெயர் மூலம் உத்தரவின் படி பயனர்பெயர்) AS வரிசை_வர் இருந்து பயனர்கள்)t1 எங்கே வரிசை_வர்> 1);

இறுதியாக, SELECT அறிக்கையைப் பயன்படுத்தி நகல் மதிப்புகள் அகற்றப்பட்டதா என்பதை நீங்கள் சரிபார்க்கலாம்.

mysql> தேர்ந்தெடுக்கவும் * இருந்து பயனர்கள் உத்தரவின் படி பயனர்பெயர்;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|ஐடி|பயனர்பெயர்|முழு பெயர்|மின்னஞ்சல்|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |ஆர்டெமிஸ்|வெஸ்லி சி. டில்லார்ட்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 4 |இருண்ட பொருள்|பாட்ரிசியா ஜே. ஃபாக்ஸ்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 2 |அச்சகம்|டிஃப்பனி ஜி. பெய்லி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 5 |பொருள்|ஃபே எச். ஹார்ட்லி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 3 |ராக்கெட்|கிறிஸ்டோபர் எஸ். பேடன்|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
| 1 |கன்னி|கிளாட் எம். மோரி|[மின்னஞ்சல் பாதுகாக்கப்பட்டது]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

முடிவுரை

இந்த டுடோரியலில், ஒரு தரவுத்தளத்திலிருந்து நகல் மதிப்புகளை அகற்றுவதற்கான இரண்டு முறைகள் பற்றி விவாதித்தோம். பெரிய தரவுத்தளங்கள், குறிப்பாக பொதுவான பயன்பாட்டில், வெளிப்புற இறக்குமதி மற்றும் பிற பிழைகளிலிருந்து பல நகல் மதிப்புகள் இருக்கலாம். எனவே, பயன்பாடுகள் உகந்த முறையில் செயல்படுவதை உறுதி செய்ய நகல் மதிப்புகளைத் தொடர்ந்து சுத்தம் செய்ய வேண்டிய அவசியம் உள்ளது.