มันขึ้นอยู่กับ.
ตัวแปร # 1: ถ้า MySQL เลือกที่จะสร้างดัชนีทันทีหรือรอจนกว่าข้อมูลทั้งหมดอยู่ในนั้นให้ทำการเรียงลำดับ ฯลฯ เพื่อสร้างดัชนี หมายเหตุ: ดัชนี UNIQUE (ฉันคิดว่า) จะต้องถูกสร้างขึ้นทันทีเพื่อให้สามารถตรวจสอบ UNIQUEness ได้ คีย์หลักสำหรับ InnoDB จะถูกเก็บไว้กับข้อมูล (หรือคุณสามารถระบุไว้ในทางกลับกัน) เพื่อที่จะต้องสร้างแบบสุ่ม
ตัวแปร # 2: ดัชนีติดตามข้อมูล (เช่น AUTO_INCREMENT หรือการประทับเวลา) เทียบกับการสุ่ม (GUID, MD5) หรือที่อื่นระหว่าง (หมายเลขชิ้นส่วนชื่อ friend_id)
ตัวแปร # 3 (หากดัชนีถูกสร้างขึ้นทันที): ดัชนีอาจพอดีกับแคช (key_buffer หรือ innodb_buffer_pool) หรืออาจหกลงดิสก์
ดัชนีที่ติดตามข้อมูลนั้นมีประสิทธิภาพและเป็นเส้นตรงโดยไม่คำนึงถึงคำตอบที่ # 1
รหัสสุ่มเป็นความเจ็บปวด หากดัชนีไม่พอดีกับแคชเวลาในการสร้างจะยิ่งกว่าเชิงเส้นมากโดยไม่คำนึงถึงตัวแปรอื่น ๆ (ฉันไม่เห็นด้วยกับ Rolando ในกรณีนี้) ตาราง InnoDB ขนาดใหญ่ที่มี GUID สำหรับ PK นั้นช้าลงอย่างมากที่จะแทรก INSERT ลงในแผนประมาณ 100 แถว / วินาทีสำหรับดิสก์ธรรมดา อาจจะ 1,000 ถ้าคุณมี SSD โหลดข้อมูลและ INSERT แบบแบตช์คุณจะไม่ได้ผ่านพื้นที่เก็บข้อมูลแบบสุ่ม
3.53 ถึง 5.6 - มีการเปลี่ยนแปลงไม่มาก
แกนหมุนหลายอัน? การสตริป RAID จะดีกว่าในเกือบทุกสถานการณ์กว่าการกำหนดสิ่งนี้ด้วยตนเองที่นี่และที่นั่น การแบ่งด้วยตนเองนำไปสู่สถานการณ์ที่ไม่สมดุล - การสแกนตารางติดอยู่บนดิสก์ข้อมูล การดำเนินการเฉพาะดัชนีติดอยู่บนดิสก์ดัชนี แบบสอบถามแบบโดดๆอันดับแรกจะพบดิสก์ดัชนีจากนั้นดิสก์ข้อมูล (ไม่มีการทับซ้อนกัน); เป็นต้น