情況:c#,sql 2000爲什麼參數在where子句中比字面值慢?
我有一張桌子,我們稱之爲'mytable',有三千萬行。 主鍵是由域A和B的了:
A char(16)
B smallint(2)
當我做這樣的搜索,它運行非常緩慢(如它做了全表)
string a="a";
int b=1;
string sql = "select * from table(nolock) where [email protected] and [email protected]";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@a", a);
cmd.Parameters.AddWithValue("@b", b);
using (SqlDataReader rdr = cmd.ExecuteReader()) {...}
}
將其更改爲然而,它運行得非常快(例如它觸及索引):
string where =
String.Format("a='{0}' and b={1}", a, b);
string sql = "select * from table(nolock) where " + where;
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
using (SqlDataReader rdr = cmd.ExecuteReader()) {...}
}
究竟是怎麼回事?對我來說似乎很陌生。
嘗試重新啓動數據庫服務器並顛倒測試順序。所有這些的目標是排除SQL Server部分的緩存。 – 2009-09-08 06:38:16
不幸的是不是生產服務器的選項。 – Chris 2009-09-08 06:39:09
這可能會有所幫助 - 但可能不會:http://stackoverflow.com/questions/1211287/getting-a-query-to-index-seek-rather-than-scan – PaulB 2009-09-08 06:41:02