4 แนวทางในการใช้ SQL เพื่อหาข้อมูลที่ซ้ำกัน

23-ส.ค.-24

คัมภีร์เทพ IT

ข้อมูลที่ซ้ำกัน (Duplicate Data) ใน Database ถือเป็นปัญหาที่มักพบได้บ่อย แต่มันก็อาจส่งผลกระทบอย่างมีนัยสำคัญต่อความสมบูรณ์ของข้อมูล, ประสิทธิภาพการจัดเก็บข้อมูล และประสิทธิภาพโดยรวมของระบบ ในบทความนี้ เรามาดู 4 แนวทางในการใช้ SQL เพื่อหาข้อมูลที่ซ้ำกัน

การมี Duplicate Data อาจทำให้เกิดปัญหาหลายประการ:

  1. Storage Costs เพิ่มขึ้น เนื่องจากมีข้อมูลที่ไม่จำเป็นมากินพื้นที่
  2. ประสิทธิภาพการ Query ช้าลง เนื่องจากการประมวลผลข้อมูลซ้ำ ๆ
  3. การรายงานและการวิเคราะห์ที่ไม่ถูกต้อง ซึ่งสิ่งนี้อาจนำไปสู่การตัดสินใจทางธุรกิจที่มีข้อบกพร่องได้
  4. ความสับสนในการจัดการข้อมูลและการโต้ตอบกับลูกค้า

ก่อนอื่นให้ Create และ Insert ข้อมูลบางส่วนกันก่อน:

1. ใช้ GROUP BY กับ HAVING:

การใช้ GROUP BY ร่วมกับ HAVING ถือเป็นวิธีที่มีประสิทธิภาพและตรงไปตรงมาในการระบุ Row ที่ซ้ำกันใน SQL วิธีการนี้จะช่วยจัด Group Row ที่มี Value เหมือนกันใน Column ที่ต้องการ จากนั้นจะ Filter Group เหล่านี้เพื่อแสดงเฉพาะ Row ที่มีหลายรายการ

นี่เป็นหนึ่งในแนวทางที่ใช้กันอย่างแพร่หลาย ในการค้นหารายการที่ซ้ำกันใน Table

2. ใช้ Window Functions:

Window Functions มีการนำเสนอวิธีการที่ทรงพลังและมีประสิทธิภาพในการระบุ Row ที่ซ้ำกันใน SQL โดยเฉพาะ Datasets ขนาดใหญ่ ซึ่ง Functions เหล่านี้จะช่วยให้เราสามารถคำนวณชุดของ Row ที่เกี่ยวข้องกับ Row ปัจจุบันได้ ซึ่งจะมอบวิธีที่ยืดหยุ่นในการวิเคราะห์และระบุรายการที่ซ้ำกัน

Window Functions อย่าง ROW_NUMBER() สามารถทำสิ่งนั้นได้

3. ใช้ EXISTS:

EXISTS Operator ใน SQL ก็เป็นอีกวิธีหนึ่งในการตรวจสอบการมีอยู่ของ Row ที่ตรงตาม Criteria ที่กำหนด ซึ่งทำให้มีประโยชน์อย่างยิ่งในการระบุรายการที่ซ้ำกัน วิธีการนี้มีประสิทธิภาพมากกว่าวิธีอื่น โดยเฉพาะอย่างยิ่งเมื่อทำงานกับเงื่อนไขที่มีความซับซ้อน

4. ใช้ Self-Join:

Self-Join เป็นเทคนิค SQL ที่ทรงพลังอีกวิธีหนึ่ง ที่อนุญาติให้ Table สามารถ Join กับตัวมันเองได้ ทำให้มีประโยชน์อย่างยิ่งในการค้นหาแถวที่ซ้ำกัน วิธีการนี้จะทำการเปรียบเทียบแต่ละ Row กับ Row อื่น ๆ ใน Table เดียวกัน ซึ่งช่วยให้เราสามารถระบุ Records ที่แชร์ Value ที่เหมือนกันใน Column ที่ระบุได้

อธิบายเพิ่มเติม สำหรับกรณีการใช้ EXISTS กับ Self-Join

1. ความจำเป็นในการมี Unique Identifier

  • สำหรับ EXISTS และ Self-Join นั้น เราจำเป็นต้องมี Unique Identifier เมื่อค้นหารายการที่ซ้ำกันแบบตรงกันทุกประการ
  • Unique Identifier (มักเป็น Auto-Incrementing ID หรือ Primary Key) จะช่วยแยกแยะระหว่าง Row ที่เหมือนกันได้

2. จุดประสงค์ของ Unique Identifier

  • ช่วยให้เราสามารถเปรียบเทียบ Row โดยที่ไม่ต้องจับคู่ Row กับตัวมันเอง
  • ช่วยให้เราสามารถเลือกได้เพียง Row เดียวจากแต่ละชุดของรายการที่ซ้ำกัน

สำหรับ Table ที่มีขนาดใหญ่ ให้ลองพิจารณาจากเทคนิค Optimizations ดังนี้:

  1. ตรวจสอบให้แน่ใจว่า คุณมี Index ที่เหมาะสมใน Column ที่คุณกำลังตรวจสอบรายการที่ซ้ำกัน
  2. หากเป็นไปได้ ให้ใช้การ Partitioning ใน Column ที่คุณตรวจสอบรายการซ้ำกันบ่อย ๆ
  3. พิจารณาใช้ Temporary  Tables หรือ Common Table Expressions (CTE) เพื่อลดความซับซ้อนของการ Queries ข้อมูล
  4. ใช้ EXPLAIN PLAN เพื่อวิเคราะห์ประสิทธิภาพการ Query แล้วค่อยมาทำการ Optimize
  5. สำหรับ Tables ที่มีขนาดใหญ่มาก ให้ลองใช้ Batch Processing หรือ Parallel Query Execution หาก Database System ของคุณมีการรองรับ

วิธีที่มีประสิทธิภาพที่สุดจะขึ้นอยู่กับ Database System, Table Structure และ Data Distribution ของคุณ และมักจะเป็นการคุ้มค่าที่จะทดสอบหลาย ๆ วิธีเพื่อค้นหาประสิทธิภาพที่ดีที่สุดสำหรับ Use Case ที่คุณต้องการ

การลบ Rows ที่ซ้ำกัน

เรามาดูวิธีการลบ Rows ออกจากรายการที่ซ้ำกันแบบทุกประการใน Table คุณสามารถใช้ Common Table Expression (CTE) และ ROW_NUMBER() Function ร่วมกันได้

นี่คือวิธีการทำงานของมัน:

  1. CTE จะใช้ ROW_NUMBER() เพื่อ Assign หมายเลขให้กับแต่ละ Row ภายใน Groups ที่มีข้อมูลซ้ำกัน
  2. คำสั่ง PARTITION BY จะกำหนดสิ่งที่ถือเป็นข้อมูลที่ซ้ำกัน (แสดงรายการ Column ทั้งหมดที่ควรจะเหมือนกัน)
  3. คำสั่ง ORDER BY จะกำหนดว่าจะเก็บข้อมูลที่ซ้ำกัน ตัวไหนไว้ (โดยเก็บข้อมูลที่มี rn = 1)
  4. คำสั่ง DELETE จะลบ Row ที่มีค่า rn > 1 ซึ่งจะทำให้ลบข้อมูลที่ซ้ำกันทั้งหมด เหลือเพียงแค่ Row เดียวสำหรับแต่ละชุดของข้อมูลซ้ำกัน

ที่มา: https://blog.devgenius.io/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด