ฉันกำลังตั้งค่าตารางที่อาจมีมากกว่า 70 คอลัมน์ ตอนนี้ฉันกำลังคิดที่จะแยกมันออกเนื่องจากข้อมูลบางส่วนในคอลัมน์ไม่จำเป็นทุกครั้งที่เข้าถึงตาราง จากนั้นอีกครั้งถ้าฉันทำสิ่งนี้ฉันจะต้องใช้การรวม
ณ จุดใดถือว่ามีจำนวนคอลัมน์มากเกินไปหรือไม่
ฉันกำลังตั้งค่าตารางที่อาจมีมากกว่า 70 คอลัมน์ ตอนนี้ฉันกำลังคิดที่จะแยกมันออกเนื่องจากข้อมูลบางส่วนในคอลัมน์ไม่จำเป็นทุกครั้งที่เข้าถึงตาราง จากนั้นอีกครั้งถ้าฉันทำสิ่งนี้ฉันจะต้องใช้การรวม
ณ จุดใดถือว่ามีจำนวนคอลัมน์มากเกินไปหรือไม่
คำตอบ:
ก็ถือว่ามากเกินไปเมื่อมีการดังกล่าวข้างต้นขีด จำกัด สูงสุดการสนับสนุนจากฐานข้อมูล
ความจริงที่ว่าคุณไม่ต้องการให้ทุกคอลัมน์ส่งคืนโดยทุกแบบสอบถามเป็นเรื่องปกติอย่างสมบูรณ์ นั่นเป็นเหตุผลที่คำสั่ง SELECT ให้คุณตั้งชื่อคอลัมน์ที่คุณต้องการได้อย่างชัดเจน
ตามกฎทั่วไปโครงสร้างตารางของคุณควรสะท้อนถึงรูปแบบโดเมนของคุณ ถ้าคุณมีแอตทริบิวต์ 70 (100 คุณมีอะไรบ้าง) ที่เป็นของเอนทิตีเดียวกันก็ไม่มีเหตุผลที่จะแยกพวกมันออกเป็นหลายตาราง
select count(*) from votes
ทุกครั้งหรือคุณคิดว่ามันอาจจะถูกทำให้ผิดปกติ? นั่นทำให้ฐานข้อมูล SO ไม่ดีและ Jeff Atwood บ้าหรือไม่?
มีประโยชน์บางอย่างที่จะแยกตารางที่มีอยู่ในหลายที่มีคอลัมน์น้อยลงซึ่งจะเรียกว่าแนวตั้งพาร์ทิชัน นี่คือบางส่วน:
หากคุณมีตารางที่มีหลายแถวการแก้ไขดัชนีอาจใช้เวลานานมากเนื่องจาก MySQL จำเป็นต้องสร้างดัชนีทั้งหมดในตารางใหม่ การแบ่งดัชนีในหลาย ๆ ตารางอาจทำให้เร็วขึ้น
ขึ้นอยู่กับแบบสอบถามและประเภทคอลัมน์ของคุณ MySQL อาจกำลังเขียนตารางชั่วคราว (ใช้ในแบบสอบถามเลือกที่ซับซ้อนกว่า) ลงในดิสก์ สิ่งนี้ไม่ดีเนื่องจากดิสก์ i / o อาจเป็นคอขวดขนาดใหญ่ กรณีนี้เกิดขึ้นหากคุณมีข้อมูลไบนารี (ข้อความหรือหยด) ในแบบสอบถาม
อย่าเพิ่มประสิทธิภาพก่อนเวลาอันควร แต่ในบางกรณีคุณจะได้รับการปรับปรุงจากตารางที่แคบลง
มีจำนวนมากเกินไปเมื่อละเมิดกฎของการทำให้เป็นมาตรฐาน มันค่อนข้างยากที่จะรับคอลัมน์จำนวนมากนั้นหากคุณกำลังทำให้ฐานข้อมูลของคุณเป็นปกติ ออกแบบฐานข้อมูลของคุณเพื่อสร้างแบบจำลองปัญหาโดยไม่ใช้กฎหรือแนวคิดเทียมใด ๆ เกี่ยวกับการเพิ่มประสิทธิภาพสำหรับแพลตฟอร์มฐานข้อมูลเฉพาะ
ใช้กฎต่อไปนี้กับตารางแบบกว้างและคุณจะมีคอลัมน์น้อยกว่ามากในตารางเดียว
นี่คือลิงค์ที่จะช่วยคุณได้
It is pretty hard to get that many columns if you are normalizing your database.
ไม่ยากอย่างที่คิด
นั่นไม่ใช่ปัญหาเว้นแต่แอตทริบิวต์ทั้งหมดเป็นของเอนทิตีเดียวกันและไม่ขึ้นอยู่กับกันและกัน เพื่อให้ชีวิตง่ายขึ้นคุณสามารถมีคอลัมน์ข้อความหนึ่งคอลัมน์ที่มีอาร์เรย์ JSON เก็บไว้ในนั้น แน่นอนว่าหากคุณไม่มีปัญหาในการรับแอตทริบิวต์ทั้งหมดทุกครั้ง แม้ว่าสิ่งนี้จะเอาชนะจุดประสงค์ของการจัดเก็บใน RDBMS โดยสิ้นเชิงและจะทำให้ทุกธุรกรรมฐานข้อมูลซับซ้อนขึ้นมาก ดังนั้นจึงไม่แนะนำให้ปฏิบัติตามแนวทางทั่วทั้งฐานข้อมูล
การมีคอลัมน์มากเกินไปในตารางเดียวกันอาจทำให้เกิดปัญหาใหญ่ในการจำลองแบบได้เช่นกัน คุณควรทราบว่าการเปลี่ยนแปลงที่เกิดขึ้นในต้นแบบจะจำลองแบบไปยังทาส .. ตัวอย่างเช่นหากคุณอัปเดตหนึ่งเขตข้อมูลในตารางแถวทั้งหมดจะเป็น w