c# - C# 的 MySql.Data.MySqlClient,大型 MySql 表的时间到期

标签 c# mysql sql database

我在我的一个应用程序中使用 C# 的 MySql.Data.MySqlClient。

在某个时刻,我的 .net 应用程序从一个大型 MySql 表中选择:

  • 有两列,
  • 一列为主键(PRI、int(11)、自动递增)
  • 其他列是包含一些文本的列,( varchar(8000) )
  • 此列的一个示例条目是:

info1=a;info2=b;cIndex=1;info4=d;info5=0.33;

碰巧的是,这个非常大的表中包含文本段“'%cIndex=1;%'”的条目位于包含较大 cIndex 值(例如 34)的文本段的条目之前。

例如:

  • column2 值为的条目 “信息1=a;信息2=b;cIndex=1;信息4=d;信息5=0.33”;是第 45566 个条目 在此数据库上,
  • 而column2值为 “信息1=a;信息2=b;cIndex=34;信息4=d;信息5=0.33;”是第 10,000,000 个 条目放在 table 上。
  • 所以基本上,cIndex 值较低的条目位于 from 之前 cIndex 值较高的条目。

该表与我之前的应用程序的主要区别在于,按照我的标准,我正在运行 sql 语句的表“非常大”;

  • 有 2 列
  • 还有 2460 万行。
  • 以及我上面提到的数据结构。

我在应用程序中运行的 sql 语句的示例是:

SELECT column2 FROM myLargeTable WHERE (column2 LIKE
'%info3=1;%') AND (column2 LIKE '%cIndex=0;%');

并且,我在 C# 应用程序中使用的方法来运行此查询以获得结果基本上如下:

public static string getInfoFromDb(string tbl, string col, string whr)
{

string myInfo = "error";

string sqlStr = "SELECT " + col + " from " + tbl + " " + whr + " " + " LIMIT 1 ";

MySqlConnection cn = new MySqlConnection(cstr); 
cn.Open();
try 
{
MySqlCommand co = new MySqlCommand(sqlStr, cn); 
MySqlDataReader rd = co.ExecuteReader(); 
while (rd.Read()) { myInfo = rd.GetString(col); } 
co.Dispose(); 
}

catch { /* do nothing */}
cn.Close();

return myInfo;
}

(所以,代码非常简单,并且在我的数据库中工作了很长时间,其中表的大小要小得多,大约有 70000 多行)

我的问题是:

  • 我的 sql 语句从以下位置运行时返回正确的结果 Toad-for-MySql 的编辑器页面,对于任何 cIndex 值 - 要么是 较小的值(例如 1)或较大的值(例如 34)。在任何情况下, sql语句返回正确的结果。
  • 而且,正如预期,当 cIndex 值很小(例如 1)时,当这次从我的 C# 应用程序中运行相同的 sql 语句时,此 sql 语句将返回正确的结果,即 SELECT column2 FROM myLargeTable WHERE ( column2 LIKE '%info3=1;%') AND (column2 LIKE '%cIndex=1;%') 返回正确的结果。

  • 但是,有趣的是,这一次出乎意料的是,当从我的 C# 应用程序中运行相同的 sql 语句时,当 sql 语句中感兴趣的 cIndex 值为更大,例如 34。即 SELECT column2 FROM myLargeTable WHERE (column2 LIKE '%info3=1;%') AND (column2 LIKE '%cIndex=34;%')

非常感谢任何帮助。

预先感谢您的时间和考虑。

最佳答案

我发现该错误是由于较大表的超时造成的。

所以,显然,将这​​行代码添加到我的方法中解决了问题:

co.CommandTimeout = 600; // keep this value relatively large while working with large databases

关于c# - C# 的 MySql.Data.MySqlClient,大型 MySql 表的时间到期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44911325/

相关文章:

c# - System.Threading.ThreadPool 与信号量?

c# - 在 C# 中使用 ffmpeg 将两个 mp4 视频合并为单个视频不起作用

java - mysql 运行时异常

mysql - 检索存在于具有相同列结构的两个不同表中的相同数据

python - 为什么 Python/Django 不会在 Mysql : ERROR 1205 (HY000): Lock wait timeout exceeded 上引发异常

sql - 支持 sproc 的 In-Proc DB

SQL:Bit 或 char (1) 哪个更好

c# - 使用委托(delegate)来简化函数调用

sql - 对于 BLOB, 'length() IS NULL' 与 'IS NULL' 等效且更快吗?

c# - 如果 DataRowCollection 的基类派生自 IEnumerable<T>,为什么不能在 DataRowCollection 上使用 LINQ