我有一个我写的MySQL查询显示我想要的数据,但运行时需要至少30秒 - 1分钟。
我研究了如何使用我需要的COUNT
创建nested SELECT
查询以显示我需要的数据。 The SQL也是我拥有的网页的一部分,当我在页面之间的go时,它需要相同的加载时间。我确信有一种更有效的方式来编写查询,因此它加载速度很快,因为ttb_shows表中只有大约1,500条记录,而ttb_books表中只有大约11k条记录。以下是查询。
创建TABLE ttb_books
(
book_id
int (11) NOT NULL,
book_name
varchar (255) NOT NULL DEFAULT'',
cover_image
varchar (255) DEFAULT NULL,
show_id
int (11) NOT NULL DEFAULT'0',
state_id
int (7) NOT NULL DEFAULT'0',
notes
文字,
year
varchar (255) DEFAULT NULL,
publisher
varchar (255) DEFAULT NULL,
status_id
int (7) NOT NULL DEFAULT'0',
no_pages
varchar (255) DEFAULT NULL,
footer
文字,
opt1
varchar (255) NOT NULL DEFAULT'$5-10',
opt2
varchar (255) DEFAULT NULL,
opt3
varchar (255) DEFAULT NULL,
opt4
varchar (255) DEFAULT NULL,
opt5
varchar (255) DEFAULT NULL,
owned
int (1) DEFAULT'0'
)ENGINE = MyISAM DEFAULT CHARSET = latin1;
创建TABLE ttb_shows
(
show_id
int (11) NOT NULL,
show_name
varchar (255) NOT NULL DEFAULT'',
date_added
datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
)ENGINE = MyISAM DEFAULT CHARSET = latin1;
SELECT ttb_shows.show_id, ttb_shows.show_name, ttb_shows.date_added,
COUNT(ttb_books.book_id) AS books,
(SELECT COUNT(ttb_books.owned) FROM ttb_books WHERE (owned=1 AND ttb_books.show_id = ttb_shows.show_id)) AS owned
FROM ttb_shows LEFT JOIN ttb_books ON ttb_shows.show_id = ttb_books.show_id
GROUP BY ttb_shows.show_id, ttb_shows.show_name, ttb_shows.date_added
感谢所有能够提供帮助的人。非常感谢!
您可以根据案例使用sum来避免所有者的子查询
SELECT ttb_shows.show_id
, ttb_shows.show_name
, ttb_shows.date_added
, COUNT(ttb_books.book_id) AS books
, sum( case when ttb_books.owned = 1 then 1 else 0 end) AS owned
FROM ttb_shows
LEFT JOIN ttb_books ON ttb_shows.show_id = ttb_books.show_id
GROUP BY ttb_shows.show_id, ttb_shows.show_name, ttb_shows.date_added