我目前正在尝试对Stack Overflow注释的数据转储运行一些查询。架构如下所示:
CREATE TABLE `socomments` (
`Id` int(11) NOT NULL,
`PostId` int(11) NOT NULL,
`Score` int(11) DEFAULT NULL,
`Text` varchar(600) NOT NULL,
`CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`UserId` int(11) NOT NULL,
PRIMARY KEY (`Id`),
KEY `idx_socomments_PostId` (`PostId`),
KEY `CreationDate` (`CreationDate`),
FULLTEXT KEY `Text` (`Text`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我针对该表运行了该查询,并且运行速度极其慢(它确实具有2900万行,但是具有全文索引):
SELECT *
FROM socomments
WHERE MATCH (Text) AGAINST ('"fixed the post"' IN BOOLEAN MODE)
因此,我对其进行了概要分析,其结果是:
|| Status || Duration ||
|| starting || 0.000058 ||
|| checking permissions || 0.000006 ||
|| Opening tables || 0.000014 ||
|| init || 0.000019 ||
|| System lock || 0.000006 ||
|| optimizing || 0.000007 ||
|| statistics || 0.000013 ||
|| preparing || 0.000005 ||
|| FULLTEXT initialization || 207.1112 ||
|| executing || 0.000009 ||
|| Sending data || 0.000856 ||
|| end || 0.000004 ||
|| query end || 0.000004 ||
|| closing tables || 0.000006 ||
|| freeing items || 0.000059 ||
|| logging slow query || 0.000037 ||
|| cleaning up || 0.000046 ||
如您所见,它在FULLTEXT初始化上花费了很长时间。这正常吗?如果没有,我将如何解决?
id_group 2
和id_group 23
。这样,您就可以在主表中进行搜索,并将查询范围限制为2.000至2.999和23.000至23.999。当然,当您混合所有注释以创建新的关键字组合时,第二个将根据需要获得更多结果,但最终它会加快整个过程。当然,它会使磁盘空间使用量增加一倍。新评论应保存在组表中。