2013-04-02 268 views
1

我正在研究查询MySQL数据库的C#WinForm应用程序。查询所需的时间令人难以置信,速度很慢(30秒 - 1分钟)。我对DB的经验很少,我似乎无法弄清楚我的查询有什么问题。有人可以指出我做错了什么。查询运行速度太慢

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; 
+0

@user ....你试过索引你的表吗? – MikeTWebb

+2

请再次粘贴您的代码,这次请选择整个区块,然后单击代码按钮! – Blorgbeard

+0

查询需要多长时间手动运行? – Blorgbeard

回答

3

我会确保你有连接字段和日期的索引。

0

我要去假设tbl2.addrs是一个独特的密钥。如果不是,你正在做一个交叉连接,这是非常昂贵的,可能不是你想要的。

也就是说:请确保您有tbl1.idtbl2.addrs,以及可选tbl1.date指标。

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应用程序。使用查询参数。他们的一种补偿品质是他们有时会加速查询。