У мене є таблиця InnoDB 700 Гб, до якої я більше не пишу даних (лише для читання). Я хотів би видалити старіші дані, які він містить, і повернути цей диск на дисках (оскільки у мене його не вистачає). Видалити частину досить просто, оскільки у мене є первинний індекс з автоматичним включенням, тому я можу просто повторювати їх за допомогою і видаляти рядки, але це не поверне мені простір. Я припускаю, що це OPTIMIZE TABLE
буде, але це може зайняти вічно на столі в 700 Гб, тож чи є інший варіант, який я оглядаю?
Редагувати 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;
Нам також потрібно побачити структуру таблиці, якщо це дозволено.
Редагувати Ноам
Це вихід запиту:
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-дисками і більше не хвилюються.