ฉันมีตาราง InnoDB 700GB ซึ่งฉันไม่ได้เขียนข้อมูลใด ๆ เพิ่มเติมไปยัง (อ่านเท่านั้น) ฉันต้องการลบข้อมูลเก่าที่เก็บไว้และเรียกคืนพื้นที่ดิสก์นั้น (ขณะที่ฉันหมดข้อมูล) ส่วนลบนั้นค่อนข้างง่ายเพราะฉันมีดัชนีหลักอัตโนมัติเพื่อให้ฉันสามารถวนซ้ำโดยใช้มันและลบแถว แต่นั่นจะไม่ทำให้ฉันกลับมามีพื้นที่อีก ฉันคิดว่าOPTIMIZE TABLE
จะใช้ แต่อาจใช้เวลาตลอดไปบนโต๊ะ 700GB ดังนั้นมีตัวเลือกอื่นที่ฉันสามารถมองเห็นได้หรือไม่
แก้ไขโดย RolandoMySQLDBA
สมมติว่าตารางของคุณคือmydb.mytable
กรุณาเรียกใช้แบบสอบถามต่อไปนี้และโพสต์ที่นี่เพื่อให้คุณสามารถกำหนดพื้นที่ที่จำเป็นสำหรับการหดตัวของตาราง:
SELECT
FORMAT(dat/POWER(1024,3),2) datsize,
FORMAT(ndx/POWER(1024,3),2) ndxsize,
FORMAT((dat+ndx)/POWER(1024,3),2) tblsize
FROM (SELECT data_length dat,index_length ndx
FROM information_schema.tables WHERE
table_schema='mydb' AND table_name='mytable') A;
เราต้องดูโครงสร้างของตารางด้วยหากได้รับอนุญาต
แก้ไขโดย Noam
นี่คือผลลัพธ์ของแบบสอบถาม:
datsize ndxsize tblsize
682.51 47.57 730.08
นี่คือโครงสร้างของตาราง ( SHOW CREATE TABLE
)
`CREATE TABLE `mybigtable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`tid` bigint(20) NOT NULL,
`text` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`ft` tinyint(1) NOT NULL,
`irtsd` bigint(20) NOT NULL,
`irtuid` int(11) NOT NULL,
`rc` int(11) NOT NULL,
`r` tinyint(1) NOT NULL,
`e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `timezone` varchar(5) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uid_tid` (`uid`,`tid`)) ENGINE=InnoDB AUTO_INCREMENT=2006963844 DEFAULT CHARSET=utf8`
ALTER TABLE ... ENGINE=InnoDB;
(ถ้าคุณมีห้องที่จะทำ) ส่วนใหญ่พอใจกับ SSD ที่เร็วมากและไม่ต้องกังวลอีกต่อไป