关于MySql索引和Asp.net C#的问题

时间:2011-02-03 17:51:18

标签: c# mysql indexing

在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);

1 个答案:

答案 0 :(得分:0)

无论索引列的数据类型是什么,都会使用索引。问题是,这将是多么有效。

例如,如果使用带索引的字符串列进行搜索,则应确保该列中的值彼此不同。如果你有像

这样的记录
index_column
------------
DHDHDSNDH233
DHDHDSNDH234
DHDHDSNDH235
DHDHDSNDH236

索引有点无用,因为引擎必须加载大量数据才能找到你的密钥。

这就是为什么很多人在搜索索引字符串列时使用GUID的原因。

如果该列不是PK,那么你必须忍受这个可能的瓶颈。