Actualmente estoy tratando de ejecutar algunas consultas contra un volcado de datos de los comentarios de Stack Overflow. Así es como se ve el esquema:
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
Ejecuté esta consulta en la tabla, y funcionó increíblemente lento (tiene 29 millones de filas, pero tiene un índice de texto completo):
SELECT *
FROM socomments
WHERE MATCH (Text) AGAINST ('"fixed the post"' IN BOOLEAN MODE)
Así que lo perfilé, cuyos resultados son:
|| 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 ||
Como puede ver, pasa mucho tiempo en la inicialización de FULLTEXT. ¿Esto es normal? Si no, ¿cómo lo arreglaría?
id_group 2
yid_group 23
. Con esto, su búsqueda dentro de su tabla principal y limitar su consulta a los rangos de identificación 2.000 a 2.999 y 23.000 a 23.999. Por supuesto, el segundo obtendrá más resultados según sea necesario a medida que mezcle todos los comentarios creando nuevas combinaciones de palabras clave, pero finalmente debería acelerar todo. Por supuesto, duplica el uso de espacio en disco. Los nuevos comentarios deben CONCATARSE a la tabla de grupo.