Почему MySQL Data Connector занимает намного больше времени, чем MySQL Query Browser? - PullRequest
2 голосов
/ 08 мая 2009

У меня очень простой запрос (три, где условия; два равны, один между) из одной таблицы, и в 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, но я не думаю, что мне нужно это делать.

Ответы [ 2 ]

1 голос
/ 12 мая 2009

Я бы посоветовал проверить, что делает работу за эти секунды (загрузка ЦП), это mysql, или это ваш код или что-то еще. Вы также можете использовать EXPLAIN, чтобы увидеть, что происходит в том или ином случае, и сравнить их.

1 голос
/ 08 мая 2009

Я столкнулся с этой проблемой перед использованием ADO.NET против SQL Server Query Analyzer. Когда мы запускали запрос из Query Analyzer, запрос выполнялся за секунду, а когда мы запускали его из нашего веб-приложения, он занимал более 2 минут. По какой-то причине применение индексов к таблице, казалось, ускорило соединение данных между нашим приложением и базой данных.

Я не знаю операционных различий между MySQl и SQL Server, но в нашем случае, похоже, происходило еще одно, что кэш выполнения был заполнен, и это замедляло выполнение всех не кэшированных планов выполнения. Мы внедрили еженедельную работу, которая очищает этот кеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...