C#,MS ACCESS-OleDb命令。ExecuteReader()需要很长时间才能执行
我的MS Access数据库中有一个表,其中包含60K+行和 我需要每30秒拍一次最新的50排 我使用这个查询:C#,MS ACCESS-OleDb命令。ExecuteReader()需要很长时间才能执行,c#,sql,ms-access-2010,oledb,rdbms,C#,Sql,Ms Access 2010,Oledb,Rdbms,我的MS Access数据库中有一个表,其中包含60K+行和 我需要每30秒拍一次最新的50排 我使用这个查询: "SELECT TOP 50 * FROM MY_TABLE ORDER BY ID DESC" 问题是偶尔(+-1/50)执行查询需要10秒以上,通常平均时间为0.03秒 我在10K行和只有5行的情况下也经历了同样的行为,但延迟较小 1) 是否有人在MS Access或Command.ExecuteReader()函数中遇到过类似的情况?这是C#问题还是MS ACCES问题 C#
"SELECT TOP 50 * FROM MY_TABLE ORDER BY ID DESC"
问题是偶尔(+-1/50)执行查询需要10秒以上,通常平均时间为0.03秒
我在10K行和只有5行的情况下也经历了同样的行为,但延迟较小
1) 是否有人在MS Access或Command.ExecuteReader()函数中遇到过类似的情况?这是C#问题还是MS ACCES问题
C#-执行读卡器时,延迟偶尔出现一次
RunSQLReaderMyTable(myCommand.ExecuteReader());
问题不在RunSQLReaderMyTable函数中,因为我有timewatch,我可以看到MyCommand.ExecuteReader()是问题所在
//SELECT ROWS FROM MY_TABLE
public static DataTable SelectTopMyTable()
{
using (OleDbConnection con = new OleDbConnection(ConnStr))
{
string tmpStr = "SELECT TOP 50 * FROM HISTORIQUE ORDER BY ID DESC";
using (OleDbCommand myCommand = new OleDbCommand(tmpStr, con))
{
if (IsConnectedToAccess())
{
try
{
con.Open();
return RunSQLReaderMyTable(myCommand.ExecuteReader());
catch (Exception err)
{
MessageBox.Show(err.ToString());
return null;
}
else
{
MessageBox.Show("Erreur de connexion a Access. Veuillez tenter de vous reconnecter.");
return null;
}
}
}
}
你能用你真正需要的字段名列表来代替
*
?这可能有助于降低查询的复杂性。Access数据库增长是正常的,您的问题1可能与问题2有关:您应该定期对数据库进行压缩/修复。这将删除所有会减小大小并提高性能的垃圾,具体取决于您的应用程序的用途,我建议迁移到功能稍强的RDBMS。可能MSSQLServer Express(同样,取决于您的应用程序)会为其提供一些专用资源来运行查询请记住,堆栈溢出是一个“问答”站点,而不是一个用于扩展、迂回讨论的站点。请将您的问题限制在一个主题上,在这种情况下,执行查询时会偶尔出现延迟。额外的“数据库膨胀”问题是重复的,“我应该切换数据库”和“MySQL与MSSQL一样快”的切线是off-topic.Hmm。也许这是你自己的节目。如果你需要每30秒录制50条最新的记录,我假设有相当多的插入正在进行。这些进程是否异步运行?--我最好的猜测是锁定冲突。你必须用整个设置的细节来扩展你的问题,这样我们才能做出更有根据的猜测。。。