J'ai une requête très simple (trois où conditions, deux égales, une entre) d'une seule table et dans MySQL Query Browser la requête prend moins d'une demi-seconde à exécuter, renvoyant 8300 enregistrements. Si je cours exactement la même requête en utilisant MySQL Data Connector (en fait, un wrapper OLEDB), cela prend environ 35 secondes.Pourquoi MySQL Data Connector prend-il beaucoup plus de temps que MySQL Query Browser?
Le moteur utilisé est MyISAM (si cela est important). J'utilise Visual Studio 2008 (aussi, si cela est important). Edit: Utilisation de MySQL Data Connector 5.2.5. Edit, edit: Passer à MySQL Data Connector 6.0.3 (le dernier) l'a réduit à 29 secondes.
La requête est:
select drh_data.reading_time, drh_data.raw_value, drh_data.float_value, drh_data.data_quality
from drh_data
where drh_data.site_id=202
and drh_data.device_id=7
and reading_time between '2009-04-08 11:15:01' and '2009-05-08 11:15:02'
order by drh_data.reading_time desc;
Toutes les idées? Mise à jour: J'ai finalement commencé à vérifier l'utilisation du processeur (comme suggéré par un répondeur) et j'ai constaté que 50% du temps CPU est utilisé par mon application. La boîte VirtualPC qui exécute MySQL (dans CentOS) a eu 0% pendant ces 20 secondes (environ), donc le problème est du côté du client. J'ai également couru un Explain sur la question, qui est revenu avec ce qui suit:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE drh_data range PRIMARY,idx_site_device_reading_receive idx_site_device_reading_receive 11 7674 Using where
Je suis tapé ici. Est-ce que quelqu'un a des idées pour résoudre cela? Je suis sur le point de devoir démanteler les sélections via LIMIT, mais je ne pense pas que je devrais le faire.
Oh, adorable. Cela s'est avéré être un problème DataGridView, pas un problème de requête MySQL. Le chargement de DataGridView a pris beaucoup plus de temps car DataGridView a dû redimensionner chaque cellule dans une rangée chaque fois qu'une ligne a été ajoutée, car j'ai défini AutoSizeRowsMode sur AllCells. Il est maintenant à 4 secondes, ce qui est beaucoup plus raisonnable. –