У меня очень простой запрос (три, где условия; два равны, один между) из одной таблицы, и в MySQL Query Browser для выполнения запроса требуется менее половины секунды, возвращая 8300 записей. Если я выполняю точно такой же запрос с использованием MySQL Data Connector (на самом деле это просто оболочка OLEDB), это займет около 35 секунд.
Используется движок MyISAM (если это имеет значение). Я использую Visual Studio 2008 (также, если это имеет значение). Изменить: Использование MySQL Data Connector 5.2.5. Редактировать, редактировать: переход на MySQL Data Connector 6.0.3 (последний) сократил его до 29 секунд.
Запрос:
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;
Есть идеи?
Обновление: я наконец-то нашел способ проверить загрузку процессора (как это было предложено ответчиком) и обнаружил, что мое приложение использует 50% процессорного времени. В окне VirtualPC, на котором работает MySQL (в CentOS), в течение этих 20 (или около того) секунд было 0%, поэтому проблема все на стороне клиента. Я также выполнил объяснение по запросу, которое вернулось со следующим:
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
Я вытащен сюда. У кого-нибудь есть идеи, чтобы решить эту проблему? Я собираюсь прибегнуть к разбиению выбора через LIMIT, но я не думаю, что мне нужно это делать.