首页 > 解决方案 > Alter Query 比数据库中任何其他比它大的表花费更多的时间

问题描述

我们的数据库中有一个表需要花费大量时间来执行查询,例如 ALTER、OPTIMIZE 等。有时普通的选择查询需要很长时间。表大小为 5GB,它是一个包含超过 2,00,000 行的小表。

kt_ticket_message | CREATE TABLE `kt_ticket_message`(  
`msg_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`ticket_id` int(11) unsigned NOT NULL DEFAULT '0',
`messageId` varchar(255) DEFAULT NULL,
`pp_group` int(11) NOT NULL DEFAULT '0',
`msg_type` enum('F','M','R','AR') DEFAULT NULL COMMENT 'F: first, M: message
      by client, R: reply by staff and AR: autoresponse',
`message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`staff_id` int(11) unsigned NOT NULL DEFAULT '0',
`staff_name` varchar(32) NOT NULL DEFAULT '',
`headers` text,
`from_email` varchar(255) NOT NULL COMMENT 'From email  using header',
`to_email` varchar(255) NOT NULL COMMENT 'To email  using header',
`reply_to_email` varchar(255) NOT NULL COMMENT 'Reply to using header',
`cc_email` varchar(255) NOT NULL COMMENT 'CC emails using header or as when
     replied by staff',
`source` varchar(16) DEFAULT NULL,
`ip_address` varchar(64) DEFAULT NULL,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` tinyint(1) DEFAULT '0' COMMENT 'Use to maintain revision history of 
         ticket for reporting. 0 = Open, 1 = Closed, 2 = Hold',
`test` varchar(255) NOT NULL DEFAULT '0' COMMENT 'testing the alter',
`test_2` text NOT NULL COMMENT 'testing again',
PRIMARY KEY (`msg_id`),
KEY `ticket_id` (`ticket_id`),
KEY `msgId` (`messageId`),
KEY `idx_comp` (`pp_group`,`status`,`created`),
KEY `testing_idx` (`msg_id`,`ticket_id`),
FULLTEXT KEY `message` (`message`)
)
ENGINE=InnoDB AUTO_INCREMENT=279508 DEFAULT CHARSET=utf8 |

这是表结构,检查一次,看看是否能发现任何问题。问题是在运行更改或优化查询时,如果插入查询进入,则查询将在中间停止,并留下一个以 #SQL- 开头的临时文件。

到目前为止还没有解决方案,所以我只能删除数据库并再次从备份中导入。感谢您的任何建议。

标签: mysql

解决方案


推荐阅读