ฉันต้องการเพิ่มที่นี่ที่ฐานข้อมูลต่าง ๆ ต้องใช้กลยุทธ์ที่แตกต่างกัน ลองเปรียบเทียบ MySQL กับ w / InnoDB และ PostgreSQL
InnoDB
ตาราง InnoDB นั้นเป็นดัชนี b-tree ของคีย์หลักซึ่งขยายเพื่อรวมข้อมูลแถวในรายการดัชนี ไม่รองรับการสแกนตามลำดับจริงและการสแกนทั้งหมดเกิดขึ้นตามลำดับตรรกะ นี่หมายถึงสองสิ่ง:
การสแกนตามลำดับใน Innodb สร้างดิสก์ I / O แบบสุ่มจำนวนมากและ
ดัชนีคีย์หลักต้องถูกสำรวจโดยไม่คำนึงว่าจะใช้ดัชนีรองหรือไม่
การค้นหาคีย์หลักนั้นเร็วกว่าในรุ่นนี้มากกว่าวิธีอื่น ๆ
ในกรณีนี้มันเป็นสิ่งสำคัญมากในการสร้างดัชนีฟิลด์ที่เพียงพอในตารางแบบหลายหน้า กฎทั่วไปคือดัชนีทุกสิ่งที่คุณต้องการกรอง
PostgreSQL
PostgreSQL ใช้ไฟล์ฮีปหนึ่งตารางต่อไฟล์ (บางตารางอาจเป็นไฟล์จำนวนมาก) ที่มีการจัดสรรทูเปิลจากพื้นที่ว่างของฮีปนั้น สนับสนุนการสแกนตามลำดับจริง เพื่อให้การสแกนคำสั่งแบบตรรกะทำงานได้จะต้องเพิ่มดัชนี
คีย์หลักใน PostgreSQL นั้นเป็นชุดย่อยของดัชนีเฉพาะที่ไม่มีค่าใด ๆ อาจเป็น NULL ข้อ จำกัด UNIQUE เสร็จสิ้นโดยใช้ดัชนีโดยนัยและประเภทดัชนีอื่น ๆ อีกมากมายได้รับการสนับสนุนโดยมีการดำเนินการที่แตกต่างกันในดัชนี
หมายความว่า:
การค้นหาคีย์หลักสมมติว่า tablerequire ที่มีขนาดใหญ่พอสมควรกดปุ่มไฟล์ดัชนีและไฟล์ตาราง สิ่งนี้ช้ากว่าวิธีของ MySQL อย่างมากโดยที่ดัชนีจะต้องถูกสำรวจและแถวนั้นจะอยู่ในดัชนี
การสแกนตามลำดับจริงทำได้ดีกว่ามากลดการสุ่มดิสก์ I / O ซึ่งจะต้องประมวลผลจำนวนแถวที่สำคัญ
การสแกนดัชนีรองทำได้ดีกว่า MySQL เนื่องจากมีเพียงดัชนีเดียวเท่านั้นที่จะต้องผ่านเพื่อไปที่ส่วนทางกายภาพของตาราง
ในโมเดลนี้ดัชนีมักจำเป็น แต่ผู้วางแผนมีอิสระมากขึ้นเมื่อใช้ดัชนีและความหมายของการไม่ใช้อย่างใดอย่างหนึ่งมักจะรุนแรงน้อยกว่า โดยทั่วไปตารางจะได้รับการปรับให้เหมาะสมที่สุด (แทนที่จะเป็นผู้เชี่ยวชาญในการค้นหา pkey) และต้องการดัชนีน้อยลง
TL; DR
รู้จัก RDBMS ของเจ้า