ประสิทธิภาพการทำงาน: mysql และเข้าร่วม

เป็นเพียงคำถามเกี่ยวกับการสร้างแบบจำลองตาราง

ฉันมีตารางผู้ใช้เช่น:

  • ชื่อผู้ใช้ varchar หลัก
  • รหัสผ่าน varchar
  • ชื่อ วาร์ชาร์
  • นามสกุล วาร์ชาร์
  • ...

แล้วก็มีบางตารางที่อ้างอิงถึงผู้ใช้เช่นตารางกลุ่มและตารางบันทึก...

ตอนนี้ฉันกำลังคิดที่จะเพิ่ม id เป็น จำนวนเต็มที่ไม่ได้ลงนามโดยอัตโนมัติ ให้กับตารางผู้ใช้ เพราะมีคนบอกฉันว่า การรวมจำนวนเต็มนั้นเร็วกว่าการรวมด้วย varchars

สำหรับฉันสิ่งนี้ฟังดูสมเหตุสมผลเพราะมีไบต์น้อยกว่าที่ต้องเปรียบเทียบ

จริงป้ะ? หรือคุณจะบอกว่าไม่จำเป็นต้องแนะนำคอลัมน์ id ให้กับตารางผู้ใช้?

ขอบคุณมากในล่วงหน้า :)


person JMW    schedule 26.12.2010    source แหล่งที่มา
comment
stackoverflow.com/questions/164991/   -  person Haim Evgi    schedule 26.12.2010


คำตอบ (2)


ในทางเทคนิคแล้ว จำนวนเต็มควรจะเร็วกว่านี้เล็กน้อยด้วยเหตุผลที่คุณเขียน อย่างไรก็ตาม ความแตกต่างที่แท้จริงในกรณีของคุณคือคุณเลือกระหว่างการมีคีย์ธรรมชาติหรือคีย์สังเคราะห์

หากคุณมีคีย์ธรรมชาติที่เสถียร (หมายความว่าไม่เคยมีโอกาส) คุณจะได้รับข้อได้เปรียบด้านประสิทธิภาพที่สำคัญอย่างหนึ่ง คุณมักจะสามารถลบการรวมตารางผู้ใช้ออกได้อย่างสมบูรณ์ เนื่องจากคุณสามารถสืบค้นได้โดยตรงบนตารางอื่น เช่น:

select ...
  from user_posts 
 where userid = 'JMW'

เกี่ยวกับการอภิปราย INT/VARCHAR นี่คือบทความที่คุณอาจสนใจ

http://www.mysqlPerformanceblog.com/2008/01/24/enum-fields-vs-varchar-vs-int-joined-table-what-is-faster/

person Ronnis    schedule 26.12.2010

MySQL ขึ้นอยู่กับเอ็นจิ้นที่คุณใช้ อาจทำงานช้ามากเมื่อใช้ดัชนี varchar โดยเฉพาะ InnoDB MyISAM ค่อนข้างเร็วแต่ไม่รองรับ ACID ดังนั้นคุณควรละทิ้งมัน

สิ่งนี้เป็นเรื่องปกติกับ DBMS ทั้งหมด จำนวนเต็มจะเร็วกว่าสตริงเสมอ (คุณเปรียบเทียบโดยใช้การทำงานของ CPU ที่รวดเร็วแบบ artithmetical über แทนที่จะเปรียบเทียบสตริงอักขระกับอักขระ)

เมื่อคุณดำเนินการเลือก JOIN ใน SQL ให้ทำในช่องที่จัดทำดัชนีไว้เสมอ ไม่ว่าจะมีจำนวนเต็มหรือไม่ก็ตาม นี่อาจเป็นคำแนะนำที่สำคัญที่สุดสำหรับคุณที่นี่

แก้ไข: ในทางปฏิบัติ DBMS ส่วนใหญ่จะปรับดัชนี varchar ให้เหมาะสมสำหรับการอ่าน InnoDB ใช้ BTREE และสตริงที่แฮชซึ่งทำให้การดำเนินการอ่านค่อนข้างรวดเร็ว InnoDB ยังคงประสบปัญหาการเขียนดัชนี varchar ช้า ฉันไม่พบข้อบกพร่องที่เกี่ยวข้อง แต่ยังคงมีอยู่เป็นข้อบกพร่อง MySQL แบบเปิดในตัวติดตามข้อบกพร่องอย่างเป็นทางการของ MySQL โมฆะดัชนี varchar เสมอเมื่อวางแผนใช้ InnoDB

person Pierre    schedule 26.12.2010