如何提高Windows XP中MYSQL ODBC 3.51驱动程序的速度?

时间:2011-10-10 09:41:34

标签: mysql odbc

我有一个简单的表,里面有3条记录。在C#.NET中使用ODBC执行select * from table是 非常慢,在20秒或更长的幅度。

如何在Windows XP中提高MYSQL ODBC 3.51驱动程序的速度?

以下是查询:

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)unit_param_id&选择两个日期之间的数据(按PC_date_logged或OPC-date排序)。我想从表中选择特定单位(如收集组)ID信息。

3 个答案:

答案 0 :(得分:2)

您的问题在于SQL而不是ODBC驱动程序很容易建立,只需使用不使用ODBC驱动程序的本机MySQL工具直接尝试查询。

我相信你会发现你的查询在没有驱动程序的情况下运行速度相同(在这种情况下这种情况很少)。

我会说问题出在您的查询中 - 我觉得它非常冗长,并且不太明白为什么你这样运行它,虽然你的语法很难确定你到底想要做什么到目前为止我可以看到这个查询可以表达,并且两个表之间的简单闭合连接没有子选择的EITHER。

在这种情况下,删除子选择将从根本上提高您的性能。除此之外,请查看@ duffymo'S anwser并使用EXPLAIN查看某些适当的索引可能对您有所帮助。

答案 1 :(得分:1)

在我责怪司机之前,我会查看你的查询。

EXPLAIN PLAN,查看查询速度慢的地方。如果您看到TABLE SCAN,它就在您身上。

确保WHERE子句中的变量已应用索引。

答案 2 :(得分:0)

首先 - 尝试重写您的查询,使用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}'>;

...更改括号中的文字&lt; ...&gt;准确的值。