โปรโมต MySQL Table Partition เป็น Table

Aug 17 2020

ทักษะการค้นหา Google ของฉันไม่เพียงพอที่จะหาวิธีแก้ปัญหานี้ ถ้าเป็นไปได้ฉันจะเลื่อนพาร์ติชันบนโต๊ะเป็นตารางได้อย่างไร?

สมมติว่าผมมีpart0, และpart1 part2มีอะไรALTER TABLEที่ฉันสามารถแปลงpart0เป็นตารางใหม่ได้หรือไม่?

กระบวนการคิดของฉันคือเนื่องจากข้อมูลมีอยู่แล้วในไฟล์แยกต่างหากบนดิสก์กระบวนการสร้างตารางอาจเร็วกว่าการสร้างตารางใหม่โดยใช้SELECTแบบสอบถาม

คำตอบ

RolandoMySQLDBA Aug 17 2020 at 23:04

SELECTคุณไม่จำเป็นต้อง ซึ่งสามารถทำได้ด้วย DDL ที่บริสุทธิ์

สำหรับตัวอย่างนี้สมมติว่าตารางที่แบ่งพาร์ติชันเป็นดังนี้:

  1. ฐานข้อมูล mydb
  2. โต๊ะ mytable
  3. พาร์ทิชัน ( part0, part1, part2)

อาจเป็นเรื่องยุ่งยาก แต่นี่คือไป

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;
ALTER TABLE mytable DROP PARTITION p0;

สิ่งนี้ทำก่อนmynewtableโดยไม่มีพาร์ติชันใด ๆ และสคีมาเดียวกันในด้านอื่น ๆ ทั้งหมด แล้วก็สัญญาแลกเปลี่ยนตารางที่มีmynewtablepart0

หากคุณไม่แน่ใจในเรื่องนี้ให้เรียกใช้

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;

ตรวจสอบแถวในmynewtableและใหม่part0และตรวจสอบให้แน่ใจ

  • mynewtable มีข้อมูลจากต้นฉบับ part0
  • ใหม่part0ควรว่างเปล่า

เมื่อคุณแน่ใจว่าการขนย้ายใช้งานได้แล้วให้รัน

ALTER TABLE mytable DROP PARTITION p0;

โปรดทดสอบสิ่งนี้ในห้องทดลองหรือ sqlfiddle ให้มันลอง !!!

RickJames Aug 17 2020 at 21:54

ใช่ a PARTITIONคือไฟล์TABLE. อย่างไรก็ตามต้องใช้คำสั่งพิเศษในการเปลี่ยนพาร์ติชันเป็นตารางหรือในทางกลับกัน

โปรดดู "ตารางที่สามารถเคลื่อนย้ายได้" และตารางล้างตารางสำหรับการส่งออก แก้ไขตาราง ptable DISCARD TABLESPACE; แก้ไขตารางนำเข้าตาราง ptable รายละเอียดแตกต่างกันระหว่าง MySQL 5.6 และ 5.7+

http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioning มีลิงก์ไปยังสถานที่สองสามแห่งที่กล่าวถึงเทคนิค