mysql select search занимает слишком много времени для отображения при запросе в Excel - PullRequest
1 голос
/ 08 июня 2011

Я совсем новичок в MySQL, поэтому, пожалуйста, потерпите меня ...

У меня есть лист Excel, который запрашивает базу данных MySQL ... Вот часть запроса (запускается из макроса VBA):

...
    sql_query = "SELECT SQL_CACHE g.Id, g.Client, g.text_parsing FROM `global`.`tbl_cots` AS g  WHERE g.Client LIKE '" & strClient & "%' GROUP BY g.Id;"

With rsPubs

      .ActiveConnection = oConn
      .Open sql_query

    ' Copy the records into cell A5
    Range("A5").CopyFromRecordset rsPubs
...

База данных содержит 1,3 миллиона строк.

Когда запрос определенного клиента (найдено 14000 строк) занимает около 10 секунд, чтобы отобразить ...

Если совпадающих записей мало, он отображается быстрее (<2 секунды) </p>

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

Однако, если я выполняю тот же запрос (возвращается 14000 строк) с MySQL Query Browser, 14000 записейпоказывается мгновенно.

Любые идеи, как сделать так, чтобы VBA-запрос выполнялся так же быстро, или это одно из ограничений использования Excel / VBA для непосредственного запроса к базе данных MySQL?

Я довольно запутался, как Insertingчерез VBA (из Excel) мне удается вставить> 10000 записей за 2 секунды .... Я не могу понять, почему SELECT занимает так много времени для запуска ...

ps поле 'client' проиндексировано

Заранее спасибо

ОБНОВЛЕНИЕ Я получал доступ к базе данных через IP (для имитации доступа к базе данных «извне / удаленно»).Изменил DNS на localhost и получил результаты почти мгновенно.

Итак ... есть ли способ ускорить SELECT при удаленном доступе к базе данных?

1 Ответ

1 голос
/ 12 июня 2012

При запросе определенного клиента (найдено 14000 строк) для отображения требуется около 10 секунд ...

Если количество совпадающих записей небольшое, оно отображается быстрее (<2 секунды) </p>

Запрос будет одновременно выполняться в базе данных независимо от того, какая программа / инструмент отправляет запрос. Однако большинство приложений запросов к БД, таких как Toad или SQLDeveloper, будут возвращать только первое число ххх строк. Ваш код VBA потребует весь набор данных для выполнения обновления, поэтому требуется меньше времени с меньшим набором результатов.

VBA вообще ужасен с точки зрения скорости (не говоря уже о CPU HOG), поэтому я бы посоветовал вам попытаться выполнить все тяжелые вычисления в самом SQL и попытаться вернуть как можно меньше строк. Под этим я подразумеваю, что если вы возвращаете кучу строк в Excel, а затем запускаете их через сводную таблицу и т. Д. Для их агрегирования, вам было бы намного лучше выполнить агрегирование в базе данных и вернуть наименьший возможный набор данных.

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