【问题标题】:Question about MySql index and Asp.net C#关于MySql索引和Asp.net C#的问题
【发布时间】:2011-02-03 17:51:17
【问题描述】:

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

在表中,用户 ID 是 int 类型。如果我在 userid 的表中有一个索引,这个查询会发生什么,即使我添加到参数的 userid 是字符串并且表中的索引是 int,它是否能够以一种好的方式使用索引?

在将 userid 添加到参数之前,它会给我更好的性能吗?将 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);

【问题讨论】:

标签: c# mysql indexing


【解决方案1】:

无论索引列是哪种数据类型,都会使用索引。问题是,这将如何有效。

例如,如果您使用带有索引的字符串列进行搜索,您应该确保这些列中的值彼此不同。如果你有类似的记录

索引列 ------------ DHDHDSNDH233 DHDHDSNDH234 DHDHDSNDH235 DHDHDSNDH236

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

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

如果该列不是 PK,则您必须忍受这种可能的瓶颈。

【讨论】:

  • 谢谢!但我不确定我是否理解。我更新了问题以使我的问题更清楚。可以再看一遍吗?
  • @Martin 哦对不起。恕我直言,两者都可以,因为索引的使用不是由框架决定的,而是由 dbms 决定的。因此,如果类型与 Int32 不匹配,则会引发异常,但这与索引无关。这只是干净的编程。
猜你喜欢
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2011-06-24
  • 2011-05-05
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多