0

我正在开发一个查询 MySQL 数据库的 C# WinForm 应用程序。查询所需的时间非常慢(30 秒 - 1 分钟)。我对数据库的经验很少,我似乎无法弄清楚我的查询出了什么问题。有人可以指出我做错了什么。

string sql = "SELECT t1.date, t1.name, t2.name, t3.addrs
              FROM tbl1 t1 JOIN tbl2 t2 ON tbl1.id = tbl2.id
              JOIN tbl3 t3 ON t3.addrs = t2.addrs WHERE t1.date = '2013-04-01';";

string connStr = "Server = 10.10.10.100; Database = mydb; etc...";
MySQLConnection conn = new MySQLConnection(connStr);
MySQLCommand cmd = new MySQLCommand(sql, conn);
MySQLDataReader rdr = null;
DataTable dt = new DataTable();

dt.Columns.Add("Id","FirstName","LastName","Address","Date");

rdr = cmd.ExecuteReader();

while(rdr.Read())
{
    dt.Rows.Add(rdr["ID"], rdr["FirstName"], rdr["LastName"], rdr["Address"],rdr["Date"]);
}

conn.Close();
rdr.Close();

dataGridView.DataSource = dt;
4

3 回答 3

3

I would make sure you have indexes on the join fields and the date.

于 2013-04-02T22:00:41.550 回答
0

我将假设这tbl2.addrs是一个唯一的密钥。如果不是,您正在执行交叉连接,这既非常昂贵,也可能不是您想要的。

也就是说:确保您在tbl1.idand上具有索引tbl2.addrs,并且可选地在tbl1.date.

于 2013-04-02T22:06:59.413 回答
0

您的查询中不需要表 t3。您选择的唯一字段是 addrs。但是,由于您要在该字段上加入 t2,因此您可以简单地从 t2 中选择它。这将是您的查询。

SELECT t1.date, t1.name, t2.name, t2.addrs
FROM tbl1 t1 JOIN tbl2 t2 ON tbl1.id = tbl2.id
WHERE t1.date = '2013-04-01'

此外,这看起来像一个 .net 应用程序。使用查询参数。它们的可取之处之一是它们有时会加快查询速度。

于 2013-04-02T22:53:22.887 回答