คู่มือ JSON ของ MySQL: ชนิดข้อมูล, ฟังก์ชัน, ประสิทธิภาพ, และแนวทางปฏิบัติที่ดีที่สุด

.## 1. บทนำ

1.1 ความสำคัญของ JSON

ในการพัฒนาเว็บสมัยใหม่ การแลกเปลี่ยนข้อมูลกำลังซับซ้อนมากขึ้นเรื่อย ๆ JSON (JavaScript Object Notation) ถูกใช้อย่างกว้างขวางสำหรับการถ่ายโอนและจัดเก็บข้อมูลเนื่องจากรูปแบบที่เบาและมีโครงสร้าง ตั้งแต่เวอร์ชัน 5.7 MySQL ได้รองรับชนิดข้อมูล JSON ทำให้การจัดการข้อมูล JSON ภายในฐานข้อมูลเป็นเรื่องง่ายขึ้น

1.2 การใช้ JSON ใน MySQL

บทความนี้ให้คำอธิบายโดยละเอียดเกี่ยวกับ JSON ใน MySQL ครอบคลุมการดำเนินการพื้นฐาน การพิจารณาด้านประสิทธิภาพ และเทคนิคการใช้งานเชิงปฏิบัติ มอบความรู้ที่จำเป็นสำหรับการใช้ JSON ใน MySQL อย่างมีประสิทธิภาพ ไม่ว่าคุณจะเป็นผู้เริ่มต้นหรือผู้ใช้ระดับสูง

2. JSON คืออะไรใน MySQL?

2.1 พื้นฐานของ JSON

JSON เป็นรูปแบบที่เรียบง่ายซึ่งจัดโครงสร้างข้อมูลเป็นคู่คีย์-ค่า ถูกใช้อย่างกว้างขวางใน API เว็บและการถ่ายโอนข้อมูลเนื่องจากความเบาและอ่านง่าย ใน MySQL คุณสามารถใช้ชนิดข้อมูล JSON เพื่อเก็บและจัดการข้อมูล JSON โดยตรงภายในฐานข้อมูล

2.2 ชนิดข้อมูล JSON ใน MySQL

ชนิดข้อมูล JSON ที่แนะนำใน MySQL 5.7 ต้องการพื้นที่ดิสก์คล้ายกับ LONGBLOB หรือ LONGTEXT เพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์ MySQL จะตรวจสอบความถูกต้องของเอกสาร JSON ขณะแทรก ซึ่งช่วยป้องกันไม่ให้ข้อมูล JSON ที่ไม่ถูกต้องถูกเก็บในฐานข้อมูล

2.3 กรณีการใช้งานทั่วไปของ JSON

สถานการณ์หลักสำหรับการใช้ JSON ใน MySQL มีดังต่อไปนี้

  • การจัดเก็บโครงสร้างข้อมูลที่ซับซ้อน
  • การบันทึกผลตอบกลับจาก API โดยไม่ต้องแก้ไข
  • การจัดการข้อมูลที่สคีมามีการเปลี่ยนแปลงอย่างต่อเนื่อง

3. การดำเนินการ JSON พื้นฐานใน MySQL

3.1 การสร้างคอลัมน์ JSON

เพื่อสร้างคอลัมน์สำหรับเก็บข้อมูล JSON ให้ระบุชนิดข้อมูล JSON ตามตัวอย่างด้านล่าง

CREATE TABLE json_data (
    doc JSON
);

3.2 การแทรกข้อมูล JSON

ใช้คำสั่ง INSERT เพื่อแทรกข้อมูล JSON ตามตัวอย่างด้านล่าง MySQL จะตรวจสอบว่าข้อมูลอยู่ในรูปแบบ JSON ที่ถูกต้องในขณะแทรกและจะคืนข้อผิดพลาดหากไม่เป็นเช่นนั้น

INSERT INTO json_data(doc) VALUES ('{"a": {"b": ["c", "d"]}, "e": "f"}');

คุณยังสามารถสร้างอ็อบเจ็กต์ JSON จากคู่คีย์-ค่าโดยใช้ฟังก์ชัน JSON_OBJECT

INSERT INTO json_data(doc) VALUES (JSON_OBJECT('key1', 'value1', 'key2', 'value2'));

3.3 การสืบค้นข้อมูล JSON

เพื่อดึงข้อมูล JSON ที่แทรกไว้ ใช้ฟังก์ชัน JSON_EXTRACT ฟังก์ชันนี้จะดึงข้อมูลจากเส้นทางที่ระบุภายในอ็อบเจ็กต์ JSON

SELECT * FROM json_data WHERE JSON_EXTRACT(doc, '$.e') = 'f';

คุณยังสามารถใช้ตัวดำเนินการย่อ -> ได้

SELECT * FROM json_data WHERE doc->'$.e' = 'f';

3.4 การอัปเดตข้อมูล JSON

เพื่ออัปเดตข้อมูล JSON อย่างบางส่วน ใช้ฟังก์ชัน JSON_SET ฟังก์ชันนี้จะอัปเดตเส้นทางที่ระบุและคืนอ็อบเจ็กต์ JSON ใหม่

UPDATE json_data SET doc = JSON_SET(doc, '$.a.b[0]', 'new_value');

4. ข้อควรพิจารณาด้านประสิทธิภาพ

4.1 ประสิทธิภาพการแทรก

เมื่อแทรกข้อมูลลงในคอลัมน์ JSON ของ MySQL ความแตกต่างด้านประสิทธิภาพระหว่างชนิด TEXT กับชนิด JSON นั้นเล็กน้อย การทดสอบแบบรันไทม์แสดงว่าการแทรก 50,000 แถวโดยใช้ชนิด JSON ใช้เวลาประมาณเท่ากับการใช้ชนิด TEXT

4.2 ประสิทธิภาพการอัปเดต

เมื่ออัปเดตข้อมูล JSON การใช้ JSON_SET ทำให้การอัปเดตบางส่วนมีประสิทธิภาพ แทนการเขียนทับเอกสารทั้งหมด คุณสามารถอัปเดตฟิลด์ที่ต้องการเท่านั้น ซึ่งช่วยปรับปรุงประสิทธิภาพ แม้จะอัปเดตบางส่วน 50,000 แถว JSON_SET ก็ยังทำงานได้อย่างมีประสิทธิภาพ

5. แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ JSON ใน MySQL

5.1 เมื่อควรใช้ JSON อย่างเหมาะสม

JSON เหมาะสำหรับการเก็บโครงสร้างข้อมูลที่ซับซ้อนและข้อมูลที่สคีมามีการเปลี่ยนแปลง อย่างไรก็ตาม สำหรับข้อมูลที่มีโครงสร้างสูง การใช้ตารางเชิงสัมพันธ์มาตรฐานมักจะมีประสิทธิภาพมากกว่า

5.2 การทำดัชนีข้อมูล JSON

ใน MySQL คุณสามารถสร้างดัชนีบนคอลัมน์ JSON ได้โดยใช้ Virtual Columns ซึ่งช่วยให้คุณปรับปรุงประสิทธิภาพการสืบค้นเมื่อทำงานกับข้อมูล JSON

ALTER TABLE json_data 
ADD COLUMN e_value VARCHAR(255) AS (doc->'$.e'), 
ADD INDEX (e_value);

5.3 การหลีกเลี่ยงข้อผิดพลาดทั่วไป

  • หลีกเลี่ยงการใช้คอลัมน์ JSON มากเกินไปและใช้ประโยชน์จากจุดแข็งของฐานข้อมูลเชิงสัมพันธ์
  • กำหนดดัชนีที่เหมาะสมเพื่อให้การสืบค้นมีประสิทธิภาพ
  • ป้องกันไม่ให้ข้อมูล JSON มีขนาดใหญ่เกินไป และทำการทำให้ข้อมูลเป็นรูปแบบปกติเมื่อจำเป็น

6. ฟังก์ชัน JSON ขั้นสูงใน MySQL

6.1 ฟังก์ชัน JSON เพิ่มเติม

MySQL มีฟังก์ชันหลายอย่างสำหรับการจัดการข้อมูล JSON ตัวอย่างเช่น คุณสามารถเพิ่มข้อมูลใหม่ลงในอาเรย์ JSON ด้วย JSON_APPEND หรือเอาฟิลด์เฉพาะออกด้วย JSON_REMOVE.

-- Append data
UPDATE json_data SET doc = JSON_APPEND(doc, '$.a.b', 'new_element');

-- Remove data
UPDATE json_data SET doc = JSON_REMOVE(doc, '$.a.b[0]');

6.2 การรวม JSON กับฟังก์ชัน SQL

ฟังก์ชัน JSON สามารถรวมกับฟังก์ชัน SQL แบบดั้งเดิมเพื่อสร้างคำสั่งค้นหาที่ซับซ้อนยิ่งขึ้น ตัวอย่างเช่น คุณสามารถใช้ข้อมูล JSON ในเงื่อนไข GROUP BY หรือ ORDER BY.

SELECT JSON_EXTRACT(doc, '$.e') AS e_value, COUNT(*) 
FROM json_data 
GROUP BY e_value;

7. สรุป

ในบทความนี้ เราได้ครอบคลุมทุกอย่างตั้งแต่การดำเนินการ JSON พื้นฐานใน MySQL จนถึงฟังก์ชันขั้นสูง โดยการใช้คุณสมบัติ JSON ของ MySQL คุณสามารถจัดเก็บและจัดการโครงสร้างข้อมูลที่ซับซ้อนได้อย่างง่ายดายในฐานข้อมูลของคุณ นำความรู้เกี่ยวกับการพิจารณาประสิทธิภาพและแนวปฏิบัติที่ดีที่สุดที่ได้กล่าวถึงไปใช้เพื่อให้การจัดการข้อมูลมีประทธิภาพมากยิ่งขึ้น.