I'm working locally with a mysql 5.7.28 and everything is working but on my develop server on 5.1.73 my request time out (+ 2mn).
The request is pretty simple but I don't get why it's not working...
SELECT t1.*
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
Weird things, if i'm swapping t1 and t2 it's working perfectly. If I use INNER JOIN it's working perfectly. If I do :
SELECT t1.*
FROM t1
WHERE t1.id
NOT IN (
SELECT t1.id
FROM t1
INNER JOIN t2 ON t1.id = t2.id)
it's not working.
t1.id and t2.id have both indexes. t1.id can be NULL, t2.id can't (but in localhost too so ??).
If you have any idea about why this isn't working feel free to help me :D
TABLES :
T1 :
CREATE TABLE `t1` (
`idDossier` bigint(10) NOT NULL AUTO_INCREMENT,
`id` char(11) DEFAULT NULL,
`idEleve` varchar(11) CHARACTER SET latin1 DEFAULT NULL,
`source` varchar(1) CHARACTER SET latin1 NOT NULL,
`departementNaissance` varchar(3) CHARACTER SET latin1 DEFAULT NULL,
`codeCommuneNaissance` varchar(5) CHARACTER SET latin1 DEFAULT NULL,
`uairne` varchar(8) CHARACTER SET latin1 NOT NULL,
`sexe` int(10) NOT NULL,
`nom` varchar(50) CHARACTER SET latin1 NOT NULL,
`prenom` varchar(50) CHARACTER SET latin1 NOT NULL,
`prenom2` varchar(25) CHARACTER SET latin1 DEFAULT NULL,
`prenom3` varchar(25) CHARACTER SET latin1 DEFAULT NULL,
`dateNaissance` date DEFAULT NULL,
`division` varchar(8) CHARACTER SET latin1 DEFAULT NULL,
`niveau` varchar(11) CHARACTER SET latin1 DEFAULT NULL,
`regimeScolaire` varchar(2) CHARACTER SET latin1 DEFAULT NULL,
`dateEntree` date DEFAULT NULL,
`dateSortie` date DEFAULT NULL,
`exam` int(3) DEFAULT NULL,
`autorisation` smallint(1) NOT NULL DEFAULT '0',
`dateAutorisation` date DEFAULT NULL,
PRIMARY KEY (`idDossier`),
KEY `exam` (`exam`),
KEY `nom` (`nom`),
KEY `prenom` (`prenom`),
KEY `dateNaissance` (`dateNaissance`),
KEY `codeCommuneNaissance` (`codeCommuneNaissance`),
KEY `nom_2` (`nom`,`prenom`,`dateNaissance`,`codeCommuneNaissance`),
KEY `autorisation` (`autorisation`),
KEY `ine` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=116431 DEFAULT CHARSET=utf8
////////////////////
T2 :
CREATE TABLE `t2` (
`idEleve` int(19) NOT NULL,
`id` varchar(11) DEFAULT NULL,
`etablissement` varchar(8) NOT NULL,
`sexe` int(10) DEFAULT NULL,
`nom` varchar(50) NOT NULL,
`prenom` varchar(50) NOT NULL,
`prenom2` varchar(100) DEFAULT NULL,
`prenom3` varchar(100) DEFAULT NULL,
`dateNaissance` date DEFAULT NULL,
`codeCommuneNaissance` varchar(5) DEFAULT NULL,
`departementNaissance` varchar(3) DEFAULT NULL,
`adresseEleveLigne1` varchar(50) DEFAULT NULL,
`adresseEleveLigne2` varchar(50) DEFAULT NULL,
`adresseEleveLigne3` varchar(50) DEFAULT NULL,
`adresseEleveLigne4` varchar(50) DEFAULT NULL,
`codeCommuneEleve` varchar(5) DEFAULT NULL,
`codePostalEleve` varchar(7) DEFAULT NULL,
`adresseEleve2Ligne1` varchar(50) DEFAULT NULL,
`adresseEleve2Ligne2` varchar(50) DEFAULT NULL,
`adresseEleve2Ligne3` varchar(50) DEFAULT NULL,
`adresseEleve2Ligne4` varchar(50) DEFAULT NULL,
`codeCommuneEleve2` varchar(5) DEFAULT NULL,
`codepostalEleve2` varchar(5) DEFAULT NULL,
`division` varchar(20) DEFAULT NULL,
`niveau` varchar(11) DEFAULT NULL,
`regimeScolaire` varchar(2) DEFAULT NULL,
`dateEntree` date DEFAULT NULL,
`dateSortie` date DEFAULT NULL,
`source` varchar(1) NOT NULL,
PRIMARY KEY (`idEleve`,`source`,`etablissement`),
KEY `nom` (`nom`),
KEY `prenom` (`prenom`),
KEY `codeCommuneNaissance` (`codeCommuneNaissance`),
KEY `dateNaissance` (`dateNaissance`),
KEY `niveau` (`niveau`),
KEY `etablissement` (`etablissement`),
KEY `nom_2` (`nom`,`prenom`,`dateNaissance`,`codeCommuneNaissance`),
KEY `nom_3` (`nom`,`prenom`),
KEY `eleve_ine` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Thanks !
When using the same table twice in a complex query, give each instance a different alias. The repetition of
t1confuses me, and may be confusing the parser!If you want the rows in t1 that are not also in t2, use this pattern:
Avoid
NOT IN ( SELECT ... ); it may be very poorly optimized.Please provide
SHOW CREATE TABLEso we can understand whether the repetition of the index onnomis a type of deliberate (such asINDEXandFULLTEXT).Timing out? Wrong results? Too many results? Too few results?
A lot of optimizations have been added between 5.1 and 5.7; this may explain "timing out".