Performance de vue MySQL

j'ai une table pour environ 100 000 utilisateurs.

Premier Cas:

explain select state, count(*) as cnt from users where state = 'ca'

quand je fais un plan d'explication pour la requête ci-dessus je reçois le coût comme 5200

Deuxième Cas:

Create or replace view vw_users as select state, count(*) as cnt from users

Explain select cnt from vw_users where state = 'ca'

quand je fais un plan d'explication sur la deuxième requête je reçois le coût comme 100.000.

comment fonctionne la clause " où " dans la vue? Est-ce que la clause " où " est appliquée après que la vue récupère toutes les lignes? Comment puis-je résoudre ce problème?

18
demandé sur Peter O. 2010-05-03 23:01:12

1 réponses

c'est à propos de afficher l'algorithme ça a été utilisé.

fusionner algorithme fonctionne bien la plupart des index de table et autres joyeusetés - temptable algorithme n'est pas - dans de nombreux cas, votre index sera juste flat-out n'est pas utilisé du tout.

Et il y a beaucoup de conneries que l'opération de fusion ne prend pas en charge

la fusion ne peut pas être utilisée si la vue contient l'une des opérations suivantes construit:

* Aggregate functions (SUM(), MIN(), MAX(), COUNT(), and so forth)
* DISTINCT
* GROUP BY
* HAVING
* LIMIT
* UNION or UNION ALL
* Subquery in the select list
* Refers only to literal values (in this case, there is no underlying table)
28
répondu Peter Bailey 2010-05-03 19:21:12