Tengo una consulta increíblemente simple (tipo de tabla InnoDb) y EXPLAIN
dice que MySQL debe hacer un pase adicional para descubrir cómo recuperar las filas en orden ordenado.¿Alguna manera de evitar una clasificación de archivos cuando la orden es diferente de la cláusula where?
SELECT * FROM `comments`
WHERE (commentable_id = 1976)
ORDER BY created_at desc LIMIT 0, 5
explicar exacta de salida:
table select_type type extra possible_keys key key length ref rows
comments simple ref using where; using filesort common_lookups common_lookups 5 const 89
commentable_id está indexado. Los comentarios no tienen nada de truco, solo un campo de contenido.
El manual sugiere que si el orden por es diferente de where, no hay manera de evitar el archivo.
http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
También probé el fin de Identificación, así como que es equivalente, pero no hace ninguna diferencia, incluso si añado Identificación como un índice (que entiendo que no se requiere como ID está indexado de forma implícita en MySQL).
¡gracias de antemano por cualquier idea!
para marcar - aquí está SHOW CREATE TABLE
CREATE TABLE `comments` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) default NULL,
`commentable_type` varchar(255) default NULL,
`commentable_id` int(11) default NULL,
`content` text,
`created_at` datetime default NULL,
`updated_at` datetime default NULL,
`hidden` tinyint(1) default '0',
`public` tinyint(1) default '1',
`access_point` int(11) default '0',
`item_id` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `created_at` (`created_at`),
KEY `common_lookups` (`commentable_id`,`commentable_type`,`hidden`,`created_at`,`public`),
KEY `index_comments_on_item_id` (`item_id`),
KEY `index_comments_on_item_id_and_created_at` (`item_id`,`created_at`),
KEY `index_comments_on_user_id` (`user_id`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31803 DEFAULT CHARSET=latin1
+1 para usar Explique primero, aunque honestamente no puedo decir que entiendo completamente cómo descifrar una declaración de Explicación. Tendrá que resolver eso uno de estos días. :) –
¿Puedes publicar también la salida de los comentarios de 'SHOW CREATE TABLE'? –
@Robert Harvey: Pruebe la excelente presentación de Baron Schwartz: http://www.percona.com/files/presentations/EXPLAIN_demystified.pdf –