Mysql BIgQuery 到一对多关系
Mysql BIgQuery to one to many relationship
我已经创建了具有一对多关系、行大小 11328441
的 table。
table 结构是
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 mint 时速度非常慢。
您的 drawno 列没有索引。这就是为什么。
您的查询将受益于
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)
是唯一的。不知道这样会不会更快
我已经创建了具有一对多关系、行大小 11328441
的 table。
table 结构是
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 mint 时速度非常慢。
您的 drawno 列没有索引。这就是为什么。
您的查询将受益于
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)
是唯一的。不知道这样会不会更快