两张桌子与将来的情况相比还是很小的。
已经在对一些常规查询进行测试时,出现了性能问题。
有人能告诉我一个更好的表结构或查询吗?
====
表1:电视节目(目前为117行)
表2:电视剧(目前为43000行)。
电视节目包含一个id,我们在电视节目中称之为t U id。
电视剧包含这个t_id和一个名为“剧集数”的字段。
每集有一个集数和一个季节数,集数是总的集数,而不考虑季节。
例如:所有季节都有10集:第2季第1集=第11集
现在查询:
我要每个电视节目的最新剧集。

SELECT tv.*,ep.* FROM tv_show tv
INNER JOIN tv_episodes ep ON ( tv.id = ep.t_id )
LEFT OUTER JOIN tv_episodes ep2
ON ( tv.id = ep2.t_id AND ep.episode_num < ep2.episode_num )
WHERE ep2.t_id is NULL

这很有效,但给服务器带来了非常困难的时间(查询时间超过10秒!)
请帮忙。
编辑:MySQL版本:*5.1.47
更新:感谢所有的解决方案,这是最快的一个。
    SELECT tv_episodes.* ,tv_show.*

    FROM tv_episodes
    INNER JOIN
    (
        SELECT t_id, MAX(episode_num) AS episode_num

        FROM tv_episodes
        GROUP BY t_id
    ) max_eps
    ON tv_episodes.t_id = max_eps.t_id AND tv_episodes.episode_num = max_eps.episode_num
  INNER JOIN
 tv_show ON tv_show.id=tv_episodes.t_id



CREATE TABLE `tv_show` (
 `id` int(255) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `specification` varchar(50) NOT NULL,
 `year` int(4) NOT NULL,
 `status` varchar(100) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `name` (`name`),
 KEY `specification` (`specification`),
 KEY `year` (`year`),
 KEY `status` (`status`)
) ENGINE=MyISAM AUTO_INCREMENT=118 DEFAULT CHARSET=latin1





CREATE TABLE `tv_episodes` (
 `id` int(255) NOT NULL AUTO_INCREMENT COMMENT 'e_id',
 `t_id` int(200) NOT NULL,
 `season` int(2) NOT NULL,
 `episode` int(4) NOT NULL,
 `episode_num` int(10) NOT NULL,
 `airing` date NOT NULL,
 `online` enum('1','2') NOT NULL COMMENT '1=yes 2=no',
 `added` int(15) NOT NULL,
 `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`),
 KEY `t_id` (`t_id`),
 KEY `season` (`season`),
 KEY `episode` (`episode`),
 KEY `season_num` (`episode_num`),
 KEY `airing` (`airing`),
 KEY `added` (`added`)
) ENGINE=MyISAM AUTO_INCREMENT=43420 DEFAULT CHARSET=latin1

最佳答案

更新:根据你的最新评论和我自己的调整,我已经编辑了我的答案。
这应该返回TVY发作记录的每个TVYID具有最大EpSyDeSnNm

SELECT tv_episodes.*
FROM tv_episodes
INNER JOIN
(
    SELECT t_id, MAX(episodes_num) AS episodes_num
    FROM tv_episodes
    GROUP BY t_id
) max_eps
ON tv_episodes.t_id = max_eps.t_id AND tv_episodes.episodes_num = max_eps.episodes_num;

关于sql - (MySQL)按组划分的最大数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3857314/

10-15 21:11