การแทรกแบบสอบถาม mysql จำนวนมากทำให้เกิดช่องว่างของลำดับ

ฉันมีคำถามเกี่ยวกับ select และ insert แถวในตารางที่มี col เพิ่มขึ้นอัตโนมัติเป็นคีย์

insert into table a select * from table B

ฉันพบว่าหลังจากดำเนินการค้นหาแล้ว มีช่องว่างของลำดับในคอลัมน์การเพิ่มอัตโนมัติใน table B

เป็นไปได้ไหม? หรือคำสั่ง select ของฉันไม่สามารถแทรกบันทึกบางรายการได้ ??

กรุณาช่วย.

ฉันไม่สามารถจำลองเคสนี้ได้เนื่องจากนี่คือเซิร์ฟเวอร์ที่ใช้งานจริง และฉันไม่มีข้อมูลสำรองก่อนที่จะดำเนินการค้นหา

ขอบคุณมาก.


person user2665145    schedule 08.08.2013    source แหล่งที่มา
comment
ฉันเชื่อว่าสิ่งนี้สามารถเกิดขึ้นได้หากคุณย้อนกลับขณะใส่ ( dev.mysql.com/doc/refman /5.1/en/ ) คุณอาจเห็นช่องว่างในลำดับของค่าที่กำหนดให้กับคอลัมน์ AUTO_INCREMENT หากคุณย้อนกลับธุรกรรมที่สร้างตัวเลขโดยใช้ตัวนับ   -  person SubSevn    schedule 08.08.2013


คำตอบ (1)


หากคุณใช้ InnoDB กับ INSERT IGNORE คุณอาจต้องการอ่านบทความนี้ที่พูดถึงปัญหานี้:

หลีกเลี่ยงการเพิ่มค่าอัตโนมัติ ช่องโหว่บน InnoDB ด้วย INSERT IGNORE

ทำไมเราถึงมีช่องว่าง?

InnoDB ตรวจสอบตัวนับการเพิ่มอัตโนมัติบนตาราง และหากจำเป็นต้องใช้ค่าใหม่ ให้เพิ่มค่าตัวนับนั้นและกำหนดค่าใหม่ให้กับคอลัมน์ ก่อนหน้า MySQL 5.1.22 InnoDB ใช้วิธีการเข้าถึงค่าตัวนับที่เรียกว่า "แบบดั้งเดิม" อันนี้ใช้การล็อคตารางพิเศษที่เรียกว่า AUTO-INC ซึ่งจะคงอยู่จนกระทั่งสิ้นสุดการสืบค้นหรือธุรกรรม ด้วยเหตุนี้ แบบสอบถามสองรายการจึงไม่สามารถล็อก AUTO-INC ในเวลาเดียวกันได้ ดังนั้นเราจึงสูญเสียการทำงานพร้อมกันและประสิทธิภาพการทำงาน ปัญหาจะยิ่งแย่ลงไปอีกเมื่อมีการสืบค้นที่ใช้เวลานานเช่น INSERT INTO table1 … SELECT … FROM table2

เมื่อใช้การแทรกแบบง่ายจากการเลือก มีข้อบกพร่องที่ทราบเกี่ยวกับเรื่องนี้

โดยสรุป ฉันจะไม่บอกว่านี่เป็นปัญหากับข้อความค้นหาของคุณ แต่เกี่ยวข้องกับวิธีที่เครื่องยนต์จัดการกับส่วนแทรกจากบล็อกที่เลือกมากกว่า

person Filipe Silva    schedule 08.08.2013
comment
ขอบคุณ. ข้อความค้นหาของฉันเป็นเพียงการแทรกโดยไม่ละเว้นและการสืบค้นเป็นแบบแบตช์ ไม่ควรมีการสืบค้นอื่นใดที่ทำงานในเวลาเดียวกัน ขออภัย ฉันค่อนข้างใหม่กับ sql - person user2665145; 08.08.2013
comment
มีข้อบกพร่องที่ทราบเกี่ยวกับเรื่องนี้ คุณมี insert from select หลายรายการหรือไม่ - person Filipe Silva; 08.08.2013