为什么MySQL数据连接器比MySQL查询浏览器花费的时间更长?

为什么MySQL数据连接器比MySQL查询浏览器花费的时间更长?,mysql,Mysql,我有一个来自单个表的非常简单的查询(三个where条件;两个等于,一个介于两者之间),在MySQL查询浏览器中,查询运行不到半秒钟,返回8300条记录。如果我使用MySQL数据连接器(实际上只是一个OLEDB包装器)运行完全相同的查询,大约需要35秒 正在使用的引擎是MyISAM(如果这很重要的话)。我正在使用VisualStudio2008(如果这很重要的话,也是如此)。编辑:使用MySQL数据连接器5.2.5。编辑,编辑:切换到MySQL Data Connector 6.0.3(最新版本)

我有一个来自单个表的非常简单的查询(三个where条件;两个等于,一个介于两者之间),在MySQL查询浏览器中,查询运行不到半秒钟,返回8300条记录。如果我使用MySQL数据连接器(实际上只是一个OLEDB包装器)运行完全相同的查询,大约需要35秒

正在使用的引擎是MyISAM(如果这很重要的话)。我正在使用VisualStudio2008(如果这很重要的话,也是如此)。编辑:使用MySQL数据连接器5.2.5。编辑,编辑:切换到MySQL Data Connector 6.0.3(最新版本)将时间缩短到29秒

查询是:

select drh_data.reading_time, drh_data.raw_value, drh_data.float_value, drh_data.data_quality
from drh_data
where drh_data.site_id=202
and drh_data.device_id=7
and reading_time between '2009-04-08 11:15:01' and '2009-05-08 11:15:02'
order by drh_data.reading_time desc;
有什么想法吗

更新:我终于开始检查CPU使用情况(正如回答者建议的那样),发现我的应用程序使用了50%的CPU时间。运行MySQL(在CentOS中)的VirtualPC盒在这20秒左右的时间内有0%,所以问题都在客户端。我还对查询进行了解释,结果如下:

id  select_type table   type    possible_keys                               key                             key_len     ref     rows    Extra
1   SIMPLE  drh_data    range   PRIMARY,idx_site_device_reading_receive     idx_site_device_reading_receive 11                  7674    Using where

我在这里被窃听了。有人有什么办法来解决这个问题吗?我打算通过限制来打破选择,但我认为我不应该这样做。

在使用ADO.NET vs SQL Server查询分析器之前,我遇到了这个问题。当我们从query Analyzer运行查询时,查询执行时间为亚秒,当我们从web应用程序运行查询时,执行时间长达2分钟。不管出于什么原因,将索引应用到表似乎可以加快我们的应用程序和数据库之间的数据连接


我不知道MySQl和SQL Server在操作上有什么不同,但在我们的案例中,另一件似乎发生的事情是,执行缓存被填满了,所有未缓存的执行计划的执行速度都大大降低了。我们每周执行一次清除缓存的作业。

我建议检查这几秒钟的工作(CPU使用),是mysql还是您的代码或其他内容。你也可以考虑使用<代码>解释<代码>来查看在一个或另一个案例中发生了什么,并比较那些。

我会在回去工作的时候检查一下。也许有一种方法可以告诉它不要点击执行缓存(类似于选择过程中的SQL\u NO\u缓存)?执行SQL\u NO\u缓存可以将时间缩短到14秒左右,这更好,但仍然不太好。最终能够测试:CPU使用率为50%,完全在我的应用程序上(我实际上是在同一个盒子上的VirtualPC上运行MySQL,所以我可以看看这是否也很有效,但事实并非如此)。解释显示它是一个简单的select类型,它使用的键,额外的一栏显示“using where”。不过,不确定现在还需要看什么。虽然这并没有完全回答问题,但它引导我朝着正确的方向前进,这对我来说已经足够好了。哦,太好了。这原来是DataGridView的问题,而不是MySQL查询的问题。加载花费的时间太长了,因为DataGridView每次都必须调整一行中每个单元格的大小增加了行,因为我已经将AutoSizeRowsMode设置为AllCells。现在它降低到4秒,这更合理。