2011-02-03 59 views
0

在Asp.net C#我用下面的代碼來從一個MySQL數據庫中選擇:問題關於MySQL索引和Asp.net C#

string userid = "12"; 
MySqlCommand mysqlcmd = new MySqlCommand("SELECT productid FROM table WHERE userid=?userid", mysqlconn); 
mysqlcmd.Parameters.AddWithValue("?userid", userid); 
mysqlcmd.Connection.Open(); 
mysqlcmd.ExecuteReader(); 
... 

在該表中的用戶ID是int類型的。如果我在userid表上有一個索引,這個查詢將會發生什麼,即使我添加到參數中的userid是一個字符串,並且表中的索引是int,它是否能夠很好地使用索引?

難道給我更好的性能,以增加用戶ID的參數轉換用戶ID爲int這樣前:

int userid_int = Int32.Parse(userid); 
MySqlParameter param = new MySqlParameter("?userid", MySqlDbType.Int32); 
param.Value = userid_int; 
cmd.Parameters.Add(param); 

還是確定只使用:

mysqlcmd.Parameters.AddWithValue("?userid", userid); 
+0

可能的dup http://stackoverflow.com/questions/2823674/sql-net-sqlparameters-addwithvalue-are-there-any-negative-performance-im – 2011-02-03 18:59:30

+0

@The Scrum Meister所以從我的理解是可以的使用AddWithValue(),因爲這會自動爲我設置正確的參數類型? – Martin 2011-02-03 19:17:54

回答

0

使用索引不管索引列是什麼樣的數據類型。問題是,這將發生多高效。

例如,如果您使用帶索引的字符串進行搜索,則應確保該列中的值彼此不同。如果您有記錄,如

 
index_column 
------------ 
DHDHDSNDH233 
DHDHDSNDH234 
DHDHDSNDH235 
DHDHDSNDH236 

指數是有點無用的,因爲發動機有加載大量數據的尋找你的鑰匙。

這就是很多人在搜索索引字符串列時使用GUID的原因。

如果專欄不是PK,你必須忍受這種可能的瓶頸。