Tenir compte de la requête suivante:MySQL expliquer anomalie
select FEE_NUMBER
from CARRIER_FEE CF
left outer join CONTYPE_FEE_LIST cfl on CF.CAR_FEE_ID=cfl.CAR_FEE_ID and cfl.CONT_TYPE_ID=3
where CF.SEQ_NO = (
select max(CF2.SEQ_NO) from CARRIER_FEE CF2
where CF2.FEE_NUMBER=CF.FEE_NUMBER
and CF2.COMPANY_ID=CF.COMPANY_ID
group by CF2.FEE_NUMBER)
group by CF.CAR_FEE_ID
Sur mon portable ce renvoie aucun résultat. En utilisant exactement la même base de données (sauvegardée) sur mes serveurs, elle renvoie des résultats.
Si je lance un Explain lui donne cette (notez la différence dans la colonne ref) mon portable je reçois ce
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------------------------------+-----------------------+---------+------------------------+------+----------------------------------------------+
| 1 | PRIMARY | CF | index | NULL | PRIMARY | 8 | NULL | 132 | Using where |
| 1 | PRIMARY | cfl | ref | FK_CONTYPE_FEE_LIST_1,FK_CONTYPE_FEE_LIST_2 | FK_CONTYPE_FEE_LIST_1 | 8 | odysseyB.CF.CAR_FEE_ID | 6 | |
| 2 | DEPENDENT SUBQUERY | CF2 | ref | FK_SURCHARGE_1 | FK_SURCHARGE_1 | 8 | func | 66 | Using where; Using temporary; Using filesort |
considérant que tous mes autres serveurs
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------------------------------+-----------------------+---------+------------------------+------+----------------------------------------------+
| 1 | PRIMARY | CF | index | NULL | PRIMARY | 8 | NULL | 132 | Using where |
| 1 | PRIMARY | cfl | ref | FK_CONTYPE_FEE_LIST_1,FK_CONTYPE_FEE_LIST_2 | FK_CONTYPE_FEE_LIST_1 | 8 | odysseyB.CF.CAR_FEE_ID | 6 | |
| 2 | DEPENDENT SUBQUERY | CF2 | ref | FK_SURCHARGE_1 | FK_SURCHARGE_1 | 8 | odysseyB.CF.COMPANY_ID | 66 | Using where; Using temporary; Using filesort |
Si je supprimer soit la jointure, soit la sous-requête, soit le dernier groupe, puis j'obtiens les résultats attendus.
Je suppose que c'est un problème de configuration, mais ce n'est pas celui que j'ai vu auparavant. Est-ce que quelqu'un sait ce qui pourrait causer cela?
Mon ordinateur portable exécute OSX 10.6 avec MySQL 5.0.41. Un autre ordinateur portable fonctionnant sous OSX 10.5.7 et MySQL 5.0.37 fonctionne bien, tout comme les serveurs Linux exécutant MySQL 5.0.27.
Quelqu'un peut-il expliquer la différence entre un plan d'explication utilisant ref = func et l'autre utilisant ref = odysseyB.CF.COMPANY_ID?
Merci.
wow! même jeu de données? des résultats différents? c'est un problème assez sérieux ... –
yep. Même jeu de données. Des résultats différents Pas bon. – Damo
Êtes-vous sûr que c'est le même jeu de données? les lignes de votre explication sont légèrement différentes.201 vs 202 16 vs 18 100 vs 101 – Rufinus