2016-08-23 87 views
0

我已經創建了具有一對多關係的表,行的大小爲11328441。 表結構爲Mysql BIgQuery一對多關係

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薄荷。

+0

請試試看:'SELECT count(*)as count FROM gameresnum gone JOIN gameresnum gtwo ON gone.DRAWNO = gtwo.DRAWNO and gone.ID 1000111

+0

我編輯我的問題謝謝。 –

+0

我編輯了我的評論 – 1000111

回答

0

您的查詢將受益於

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)是唯一的。我不知道這是否會更快。

0

您的列表中沒有索引。這就是爲什麼。

+0

請注意,複合索引'(drawno,resnum)'會更好。 –