คำตอบของ Danielเน้นที่ค่าใช้จ่ายในการอ่านแต่ละแถว ในบริบทนี้: การใส่NOT NULL
คอลัมน์ขนาดคงที่ก่อนในตารางของคุณช่วยเล็กน้อย การวางคอลัมน์ที่เกี่ยวข้องเป็นอันดับแรก (คอลัมน์ที่คุณค้นหา) ช่วยเล็กน้อย การย่อส่วนภายใน (เนื่องจากการจัดแนวข้อมูล) โดยการเล่น tetris การจัดตำแหน่งด้วยคอลัมน์ของคุณสามารถช่วยได้เล็กน้อย แต่ผลที่สำคัญที่สุดยังไม่ได้รับการกล่าวถึงโดยเฉพาะอย่างยิ่งสำหรับตารางขนาดใหญ่
คอลัมน์เพิ่มเติมทำให้แถวครอบคลุมพื้นที่ดิสก์มากขึ้นอย่างเห็นได้ชัดดังนั้นแถวที่น้อยลงจะพอดีกับหน้าข้อมูลเดียว (8 kB โดยค่าเริ่มต้น) แต่ละแถวกระจายออกไปทั่วหน้ามากขึ้น โปรแกรมฐานข้อมูลโดยทั่วไปมีการดึงข้อมูลหน้าทั้งแถวไม่ใช่บุคคล มันมีความสำคัญเล็กน้อยไม่ว่าจะเป็นแต่ละแถวจะเล็กกว่าหรือใหญ่กว่า - ตราบใดที่ต้องอ่านจำนวนหน้าเท่ากัน
หากแบบสอบถามดึงส่วนเล็ก ๆ ของตารางขนาดใหญ่ที่มีการกระจายแถวมากกว่าหรือน้อยกว่าแบบสุ่มทั่วทั้งตารางซึ่งได้รับการสนับสนุนโดยดัชนีสิ่งนี้จะส่งผลให้จำนวนการอ่านหน้าเว็บโดยประมาณเท่ากัน เป็นขนาดแถว คอลัมน์ที่ไม่เกี่ยวข้องจะไม่ทำให้คุณช้าลงในกรณีเช่นนี้ (หายาก)
โดยทั่วไปแล้วคุณจะดึงแพทช์หรือกลุ่มของแถวที่ถูกป้อนตามลำดับหรือความใกล้เคียงและแบ่งปันหน้าข้อมูล แถวเหล่านั้นกระจายออกไปเนื่องจากความยุ่งเหยิงทำให้ต้องอ่านหน้าดิสก์เพิ่มเติมเพื่อตอบสนองการค้นหาของคุณ โดยทั่วไปแล้วการอ่านหน้าเพิ่มเติมเป็นสาเหตุที่สำคัญที่สุดที่ทำให้การสืบค้นช้าลง และนั่นคือปัจจัยที่สำคัญที่สุดที่ทำให้คอลัมน์ที่ไม่เกี่ยวข้องทำให้ข้อความค้นหาของคุณช้าลง
โดยปกติแล้วฐานข้อมูลขนาดใหญ่จะมี RAM ไม่เพียงพอที่จะเก็บไว้ในหน่วยความจำแคช แถวที่ใหญ่กว่านั้นใช้แคชมากกว่ามีการแย่งกันมากขึ้นมีจำนวนแคชน้อยลงเพิ่มดิสก์ I / O มากขึ้น และการอ่านดิสก์โดยทั่วไปจะมีราคาแพงกว่ามาก น้อยกว่าด้วย SSD แต่ความแตกต่างยังคงอยู่ สิ่งนี้จะเพิ่มไปยังจุดด้านบนเกี่ยวกับการอ่านหน้าเว็บ
มันอาจจะหรืออาจจะไม่สำคัญว่าถ้าคอลัมน์ที่ไม่เกี่ยวข้อง TOAST-ED คอลัมน์ที่เกี่ยวข้องอาจเป็น TOAST-ed เช่นกันซึ่งจะนำเอฟเฟกต์เดียวกันกลับมามากมาย