情况:我需要使用PHP从运行在本地服务器(appserve)上的MySQL(版本8.0+)数据库中的三个表中检索和显示网页上的数据。
问题:我有一个有效的查询,但是检索数据花费了太多时间。我有44,000多个记录,我的机器是Windows 7 64位,具有4GB内存的Intel Core i3(我之所以这样说是因为,也许较低的机器以这种方式运行是很自然的)。
前两个表都由author(书的作者),author_id(作者的唯一自动递增ID)和title(书的标题)组成,除了ID相同外,其他两个都相同。 INT,而第二个是VARCHAR,所以即使我也想合并我不能,而第三张表则包含有关该书的其他细节,但是在此示例中,我仅使用author_id和pub_date(该书的出版日期)来演示情况。
一本书可能会遇到多个修订版本,因此书名和pub_date之间的关系是一对多的,但是在网页中,我只想显示最新的修订版本或出版日期,因此要使用MAX和GROUP BY。
我的查询是:
SELECT a.author
, a.title a.author_id
, b.title
, b.pub_date
FROM
( SELECT author
, title
, author_id
FROM authors_table
UNION
SELECT author
, title
, author_id
FROM old_authors_table
) a
LEFT
JOIN ( SELECT author_id
, title
, max(pub_date) AS pub_date
FROM details_table
GROUP
BY author_id
) b
ON b.author_id = a.author_id;