Tengo un sitio web donde los visitantes pueden dejar comentarios. Deseo agregar la capacidad de responder comentarios (es decir, comentarios anidados).Optimizar IZQUIERDA unir en la tabla con más de 30 000 filas
Al principio esta consulta era rápido, pero después de que poblaban la mesa con los comentarios existentes (aproximadamente 30000) una consulta simple como:
SELECT c.id, c2.id
FROM (SELECT id
FROM swb_comments
WHERE pageId = 1411
ORDER BY id DESC
LIMIT 10) AS c
LEFT JOIN swb_comments AS c2 ON c.id = c2.parentId
tomó más de 2 segundos, sin childComments (!).
¿Cómo puedo optimizar una consulta como esta? La posible solución sería http://www.ferdychristant.com/blog//articles/DOMM-7QJPM7 (desplácese hasta "El modelo de tabla plana hecho a la derecha") pero esto dificulta la paginación (¿cómo limito a 10 comentarios principales en 1 consulta?)
La tabla tiene 3 índices, id, pageId y ParentId.
¡Gracias de antemano!
EDITAR:
Definición de tabla agregada. Esta es la definición completa con algunas diferencias a la consulta SELECT anterior, (es decir pageID en lugar de numberId para evitar confussion)
CREATE TABLE `swb_comments` (
`id` mediumint(9) NOT NULL auto_increment,
`userId` mediumint(9) unsigned NOT NULL default '0',
`numberId` mediumint(9) unsigned default NULL,
`orgId` mediumint(9) unsigned default NULL,
`author` varchar(100) default NULL,
`email` varchar(255) NOT NULL,
`message` text NOT NULL,
`IP` varchar(40) NOT NULL,
`timestamp` varchar(25) NOT NULL,
`editedTimestamp` varchar(25) default NULL COMMENT 'last edited timestamp',
`status` varchar(20) NOT NULL default 'publish',
`parentId` mediumint(9) unsigned NOT NULL default '0',
`locale` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `userId` (`userId`),
KEY `numberId` (`numberId`),
KEY `orgId` (`orgId`),
KEY `parentId` (`parentId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34748 ;
¿Está planeando hacer anidación ilimitada? (es decir, ¿puedes responder de nuevo a una respuesta?) ¿O solo un nivel de profundidad máxima? –
¿Qué dice EXPLAIN? –
¿Es SELECCIONAR ID FROM swb_comments DONDE pageId = 1411 LIMIT 10 lento también? ¿Cuántas visitas recibe de la unión de identificación de padres? –