在Asp.net C#中,我使用以下代码从MySql数据库中进行选择:
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();
...
在表中,userid的类型为int。如果我在userid上的表中有一个索引,这个查询将会发生什么,即使我添加到参数的用户ID是一个字符串并且表中的索引是int,它是否能够以良好的方式使用索引?
在将userid添加到参数convert userid到这样的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 :(得分:0)
无论索引列的数据类型是什么,都会使用索引。问题是,这将是多么有效。
例如,如果使用带索引的字符串列进行搜索,则应确保该列中的值彼此不同。如果你有像
这样的记录index_column ------------ DHDHDSNDH233 DHDHDSNDH234 DHDHDSNDH235 DHDHDSNDH236
索引有点无用,因为引擎必须加载大量数据才能找到你的密钥。
这就是为什么很多人在搜索索引字符串列时使用GUID的原因。
如果该列不是PK,那么你必须忍受这个可能的瓶颈。