Bonjour
Je vous soumets ce petit problem.
J'ai deux tables: recent_etats et ack_etats.
recent_etats est vide pour ce test et ack_etats contient 100k lignes.
J'ai une vue qui englobe c'est deux tables:
je genere le premier plan:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 create view etats as select * from recent_etats union all select * from ack_etats;
Normal il utilise l'index sur object_type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 mysql> explain select distinct(object_type) from ack_etats; +----+-------------+-----------+-------+---------------+--------------+---------+------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+-------+---------------+--------------+---------+------+------+--------------------------+ | 1 | SIMPLE | ack_etats | range | NULL | i2_ack_etats | 130 | NULL | 5 | Using index for group-by | +----+-------------+-----------+-------+---------------+--------------+---------+------+------+--------------------------+
Maintenant:
Bizarre il fait un full scan maitenant sur la table ack_etats.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 mysql> explain select distinct(object_type) from etats; +----+--------------+--------------+------+---------------+------+---------+------+--------+-----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------+--------------+------+---------------+------+---------+------+--------+-----------------+ | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 100000 | Using temporary | | 2 | DERIVED | recent_etats | ALL | NULL | NULL | NULL | NULL | 1 | | | 3 | UNION | ack_etats | ALL | NULL | NULL | NULL | NULL | 102199 | | | NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | | +----+--------------+--------------+------+---------------+------+---------+------+--------+-----------------+
Pourquoi il n'utilise pas l'index avec l'utilisation de la vue ?
Maintenant si je mets 6 millions de lignes dans ack_etats la commande explain ne repond plus (j'ai attendus 15min avant de stop) !!!! probleme mysql ne semble plus capable de genere le plan ?
j'aimerais votre avis
Merci d'avance
Sébastien
Partager