Estoy tratando de optimizar esta consulta:MySQL Query: presentar especie cuando combinación interna, límite y el orden por
SELECT articles.id
FROM articles
INNER JOIN articles_authors ON articles.id=articles_authors.fk_Articles
WHERE articles_authors.fk_Authors=586
ORDER BY articles.publicationDate LIMIT 0,50;
artículos de mesa:
- Motor: MyISAM
- ROW_FORMAT : Dinámico
- Filas: 1 482 588
- Data_length: 788 926 672
- Max longitud de datos: 281 474 976 710 655
- longitud Index: 127 300 608
- de datos libre: 0
- suma de comprobación: null
CREATE TABLE `articles` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `publicationDate` DATE NOT NULL DEFAULT '1970-01-01', PRIMARY KEY (`id`), KEY `publicationDate` (`publicationDate`) ) ENGINE=MYISAM AUTO_INCREMENT=1498496 DEFAULT CHARSET=utf8
articles_authors Tabla:
- Motor: MyISAM
- ROW_FORMAT: Dynamic
- Filas: 1 970 750
- Data_length: 45 008 420
- Max longitud de datos: 281 474 976 710 655 longitud
- Index: 127 300 608
- de datos libre: 0
- suma de comprobación: null
CREATE TABLE `articles_authors` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `fk_Articles` int(10) unsigned NOT NULL, `fk_Authors` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `fk_Articles_fk_Authors` (`fk_Articles`,`fk_Authors`), KEY `fk_Articles` (`fk_Articles`), KEY `fk_Authors` (`fk_Authors`), ) ENGINE=MyISAM AUTO_INCREMENT=2349047 DEFAULT CHARSET=utf8
Explicar en consulta:
id (1), select_type(SIMPLE), TABLE(articles_authors), TYPE(ref), possible_keys(fk_Articles_fk_Authors, fk_Articles, fk_Authors), KEY (fk_Authors), Key_len(4), ref(const), ROWS(171568), extra (USING TEMPORARY; USING FILE sort)
id (1), select_type(SIMPLE), TABLE(articles), TYPE(eq_ref), possible_keys(PRIMARY), KEY (PRIMARY), Key_len(4), ref(articles_authors.fk_Authors), ROWS(1), extra()
Como se puede ver, la consulta SQL no está optimizado (utilizando el archivo de clase de explicar).
Gracias por su ayuda!
+1, ¡para una pregunta bien documentada! Me encanta cuando las personas realmente incluyen información pertinente! –
No veo cómo esto puede optimizarse más, porque en la cláusula where/order tiene valores de dos tablas diferentes y no puede crear un índice compuesto '(fk_Authors, publicationDate)' – Pentium10
Editado la respuesta para incluir un opción de des-normalización. – Johan