我有一个来自单个表的非常简单的查询(三个where条件;两个等于,一个在之间),在MySQL查询浏览器中,查询只用了不到半秒的时间就可以运行,返回了8300条记录。如果我使用OLEDB (实际上只是一个MySQL包装器)运行完全相同的查询,则需要大约35秒。
使用的引擎是MyISAM (如果这很重要的话)。我使用的是Visual Studio2008(如果这很重要的话)。编辑:使用MySQL数据连接器5.2.5。编辑,编辑:切换到MySQL数据连接器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 (大约)秒内没有任何变化,所以问题完全出在客户端。我还对查询运行了Explain,结果如下:
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我在这里很忙。有没有人有办法解决这个问题?我打算打破selects via限制,但我认为我不应该这么做。
发布于 2009-05-11 23:29:54
我建议检查一下这几秒钟的工作是什么(CPU使用率),是mysql还是你的代码或其他什么。您还可以考虑使用EXPLAIN来查看在其中一种情况下发生了什么,并对它们进行比较。
发布于 2009-05-08 18:56:51
在使用ADO.NET和SQL Server查询分析器之前,我就遇到过这个问题。当我们从query Analyzer运行一个查询时,查询执行了亚秒级,当我们从我们的web应用程序运行它时,它花费了2分钟以上。无论出于什么原因,对表应用索引似乎加快了应用程序和数据库之间的数据连接速度。
我不知道MySQl和SQL Server之间的操作差异,但在我们的例子中似乎发生了另一件事,那就是执行缓存被填满了,这减慢了所有未缓存的执行计划的执行速度。我们实现了一个清除该缓存的每周作业。
https://stackoverflow.com/questions/841169
复制相似问题