Как улучшить скорость драйвера MYSQL ODBC 3.51 в Windows XP? - PullRequest
0 голосов
/ 10 октября 2011
У меня есть простая таблица с 3 записями. Делать select * из таблицы с ODBC в C # .NET очень медленно, на величину 20 секунд и более.

как повысить скорость драйвера MYSQL ODBC 3.51 в Windows XP?

Вот запрос:

public static string sTableQueryUngroup = 
  " (SELECT
       *
       ,(SELECT unit_param_desc 
         FROM tr_config_unit_params 
         WHERE unit_param_id={TABLE_NAME}.unit_param_id 
           AND unit_id={UNIT_ID}) as unit_param_desc 
     FROM {TABLE_NAME} 
     WHERE unit_param_id IN 
       (SELECT unit_param_id 
        FROM tr_config_unit_params 
        WHERE unit_id={UNIT_ID}) " + " 
        AND " + " {COLUMN_NAME} " + " BETWEEN '{FROM_DATE}' and '{TO_DATE}')";

моя первая таблица tr_config_unit_params структура

unit_param_id 
unit_id  
unit_param_desc   
unit_param_opc_progid  
unit_param_host    
unit_param_link   
unit_param_data_type  
unit_param_type   
groupID    
tagID    

моя вторая таблица (по дате) r20111010

         `unit_param_id` 
         `param_value` 
         `OPC-date ` 
         `param_quality` 
         `PC_date_logged` 

Я использовал две таблицы из первой таблицы (tr_config_unit_params). Unit_param_id совпадает с другой таблицей (r20111010). Я хочу выбрать конкретную информацию об единице (например, группу сбора) из таблицы.

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

То, что ваша проблема связана с SQL, а не с драйвером ODBC, легко установить, просто попробуйте выполнить запрос напрямую, используя собственный инструмент MySQL, который не использует драйвер ODBC.

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

Я бы сказал, что проблема в вашем запросе - я нахожу его очень многословным и не понимаю, почему вы выполняете его таким образом, хотя ваш синтаксис затрудняет точное определение того, что вы пытаетесь сделать, насколько это возможно. Я могу видеть, что этот запрос может быть выражен и простое закрытое соединение между двумя таблицами без ЛЮБОГО суб-выбора.

Удаление суб-выбора радикально увеличит вашу производительность в этом случае. Кроме того, взгляните на @ duffymo'S anwser и используйте EXPLAIN, чтобы увидеть, в чем вам могут помочь некоторые индексы оценки.

1 голос
/ 10 октября 2011

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

ОБЪЯСНИТЕ ПЛАН и посмотрите, где ваш запрос медленный. Если вы видите TABLE SCAN, он на вас.

Убедитесь, что к переменным в предложениях WHERE применены индексы.

0 голосов
/ 10 октября 2011

Во-первых - попробуйте переписать ваш запрос, измените подзапрос с помощью JOIN, например -

SELECT *, p.unit_param_desc FROM <TABLE_NAME> t
  JOIN (SELECT * FROM tr_config_unit_params WHERE unit_id = <unit>) p
    ON t.unit_param_id = p.unit_param_id 
WHERE <COLUMN_NAME> BETWEEN <'{FROM_DATE}'> and <'{TO_DATE}'>;

... изменить текст в скобках <...> с точными значениями.

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