[英]MySQL Optimization: LEFT JOIN
我有以下3表:
出版物 (主键= 文章 )
article | title | pubType
作者 (主键= * author_name *)
author_name | author_somethingelse
pub_author_map
article | author_name
给定pubType
的值,我需要选择有关文章(包括作者)的信息。 为此,我有
SELECT p.article, p.title, p.dateTime, pam.author_name FROM publications p
LEFT JOIN pub_author_map pam ON pam.article = p.article
LEFT JOIN authors a ON a.author_name = pam.author_name
WHERE p.pubType = '$pubType' ORDER BY p.article LIMIT 10
即使使用LIMIT 10
,该查询的时间约为29秒。 publications
有1500行,而pub_author_map
3000行。
如何优化上述查询?
您可以通过使用索引来优化表。例如,在检索数据时用作外键的索引列:这是一个很好的索引指南, http://www.tizag.com/mysqlTutorial/mysql-index.php
//www.tizag.com/mysqlTutorial/mysql-index.php索引将花费更多磁盘空间,但是当您对内部数据相对较多的数据库进行查询时,它们可以节省数小时。
添加指标
有关专栏文章的pub_author_map
列pubType上的出版物
例如这样
CREATE INDEX pub_author_idx_1
ON pub_author_map (article);
CREATE INDEX publications_idx_1
ON publications (pubType);
如果INNER JOIN给出正确的结果,请使用它。 仅在需要它提供的结果时才使用LEFT JOIN。
您是否想看没有作者的文章?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.