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

问题描述:

我有一个简单的表,其中有3条记录。在C#.NET中使用ODBC进行select * from表的操作非常慢,大小在20秒或更长。

如何提高Windows XP中的MYSQL ODBC驱动程序3.51的速度?如何提高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与另一个表(r2011101 0)unit_param_id &选择两个日期之间的数据(按PC_date_logged或OPC日期排序)。我想从表格中选择特定的单位(如集合组)ID信息。

+0

20秒不正常,查询一个简单的表,其中有3条记录。可能不是因为司机,我会说。 – 2011-10-10 09:49:34

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

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

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

+0

公共静态字符串sTableQueryUngroup = “(选择*,(从tr_config_unit_params选择unit_param_desc其中unit_param_id = {} TABLE_NAME和.unit_param_id UNIT_ID = {UNIT_ID})从unit_param_desc {TABLE_NAME}其中” + “unit_param_id中(从其中tr_config_unit_params选择unit_param_id unit_id = {UNIT_ID})“+”和“+”{COLUMN_NAME}“+”在“{FROM_DATE}”和“{TO_DATE}”之间)“”;我已经使用这两个表来选择查询 – user847455

+0

不要把它们发送给我;在您的数据库中解释计划。这会给你更多的信息,而不是一千个猜测的答案。 – duffymo

+0

您可以通过运行'EXPLAIN SELECT someValues from someTable'来获得查询的EXPLAIN PLAN;' –

,你的问题是与SQL,而不是与ODBC驱动程序是很容易建立,只是尝试查询直接使用原生的MySQL工具,它不使用ODBC驱动程序。

我相信,你会发现你的查询慢慢无需驱动程序同样运行(在诸如此类的情况下这样做非常少)。

我会说这个问题与你的查询 - 我发现它非常详细,并不真正明白你为什么这样运行它,虽然你的语法很难确定你到底想做什么正如我所看到的,这个查询可以被表达,并且两个表之间的简单闭合连接不会超出子选择。

卸下子选择将从根本上提高在这种情况下,你的表现。除此之外,请查看@ duffymo's anwser并使用EXPLAIN查看一些适当的索引可以帮助您。

首先 - 尝试重写你的查询,更改子查询与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}'>; 

...括号<改变文本...>与精确值。

+0

我改变了我的查询,但它不工作 – user847455

+0

它应该工作。哪里不对?请显示您执行的查询(括号中没有参数)。 – Devart

+0

然后你改错了。 – duffymo