如何在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信息。
答案 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;准确的值。