我创建了具有一对多关系,行大小11328441的表。
表结构是

CREATE TABLE `gameresnum` (
  `ID` bigint(20) NOT NULL,
  `DRAWDAY` date DEFAULT NULL,
  `DRAWNO` int(11) DEFAULT NULL,
  `DRAWTIME` time DEFAULT NULL,
  `RESNUM` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `gameresnum`
  ADD PRIMARY KEY (`ID`),
  ADD KEY `RESNUM` (`RESNUM`);




我试图做这个查询:

SELECT count(*) as count FROM gameresnum gone
JOIN gameresnum gtwo ON gone.DRAWNO=gtwo.DRAWNO WHERE gone.RESNUM=1 AND gtwo.RESNUM=2


但这是非常缓慢的,直到2薄荷糖。

最佳答案

您的查询将受益于

INDEX(resnum, drawno) -- composite and covering


您也可以尝试

SELECT COUNT(*)
    FROM (
        SELECT 1
            FROM gamesresnum
            WHERE resnum IN (1, 2)
            GROUP BY drawno
            HAVING COUNT(*) = 2  -- to see if both are present
         ) AS x


它需要INDEX(drawno, resnum)

注意:此重新定义假定(drawno, resnum)是唯一的。我不知道这样会不会更快。

关于mysql - Mysql BIgQuery一对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39098099/

10-13 06:02