เลือก type ที่เล็กที่สุดที่ยังเก็บทุกค่าที่คุณจะต้องเก็บได้อย่างถูกต้อง type ที่เหมาะสมช่วยประหยัดพื้นที่ดิสก์ ลดขนาด index และป้องกันข้อมูลเสียหายแบบเงียบ ๆ
เลือก type ที่เล็กที่สุดที่ยังเก็บทุกค่าที่คุณจะต้องเก็บได้อย่างถูกต้อง type ที่เหมาะสมช่วยประหยัดพื้นที่ดิสก์ ลดขนาด index และป้องกันข้อมูลเสียหายแบบเงียบ ๆ
INT (4 bytes) สำหรับ id ส่วนใหญ่; ใช้ BIGINT (8 bytes) เฉพาะเมื่อคุณเกินขีดจำกัดราว ~2.1 พันล้านจริง ๆDECIMAL(10,2) สำหรับเงิน — อย่าใช้ FLOAT/DOUBLE เด็ดขาด เพราะมันปัดเศษในระบบเลขฐานสองและทำให้เศษสตางค์หายไปVARCHAR(n) สำหรับข้อความที่มีขอบเขต (ชื่อ อีเมล); ค่า n เป็นเพียงเพดาน พื้นที่จัดเก็บใช้เท่าที่คุณใช้จริงTEXT สำหรับ blob ขนาดใหญ่ (บทความ) — จะถูกเก็บนอกหน้า (off-page) และ ไม่สามารถมีค่า default ได้; อย่าใช้กับค่าสั้น ๆ ที่คุณใช้กรอง (filter)DATETIME (ไม่มี timezone, 8 bytes) เทียบกับ TIMESTAMP (แปลงเป็น UTC, 4 bytes, มีขีดจำกัดราวปี ~2038)CREATE TABLE payments (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
amount DECIMAL(10,2) NOT NULL, -- exact money, not FLOAT
currency CHAR(3) NOT NULL, -- always 3 chars -> fixed CHAR
note VARCHAR(255), -- bounded, indexable
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Pitfall: the default SQL mode rejects bad values (good) --
INSERT INTO payments (amount) VALUES ('abc'); -- ERROR 1366, not silently 0
FLOAT กับเงินVARCHAR(255) ทุกที่จนติดเป็นนิสัย — key ที่ใหญ่เกินจำเป็นทำให้ index บวมUNSIGNED กับ id/ตัวนับที่ไม่มีทางติดลบ (ช่วยเพิ่มช่วงค่าบวกเป็นสองเท่า)Data type เป็นการตัดสินใจด้านความถูกต้องและประสิทธิภาพที่ถูกที่สุดที่คุณทำได้ แต่แก้ทีหลังยากที่สุด — type ที่แคบและแม่นยำช่วยให้ index เล็กและสกัดข้อมูลผิดตั้งแต่หน้าประตูก่อนที่มันจะกลายเป็นบั๊กใน production
คลังคำถามสัมภาษณ์งาน IT พร้อมคำตอบโดยละเอียด — ตั้งแต่ระดับ Junior ถึง Senior
บริจาค