【发布时间】:2021-07-09 08:27:52
【问题描述】:
我正在使用 mysql 连接器连接 TiDB。 我发现我的查询中没有使用索引。 经过我的分析,我发现由于没有使用铸造索引。 例如
CREATE TABLE Employee (
ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmpID VARCHAR(200) NOT NULL
);
CREATE INDEX idx_EmpID ON Employee(EmpID);
1.Explain SELECT * FROM Employee WHERE EmpID= 123;
2.Explain SELECT * FROM Employee WHERE EmpID= '123';
在上面的示例中,如果我运行第一个查询并使用解释检查执行计划,那么在第二个查询中不使用索引,因为我正在为 varchar 数据类型索引提供引号。
但是,此解决方案需要通过 .net mysqlconnector 库进行测试。 目前我正在使用mysql命令参数来执行查询。
1.带AddWithValue函数的当前逻辑
MySqlCommand cmd1 = new MySqlCommand
{
CommandText = "Select * from Employee where EmpID = @EmpID"
};
cmd1.Parameters.AddWithValue($"@EmpID", 1234);
2.通过使用添加功能为字段提供数据类型来更新逻辑
MySqlCommand cmd1 = new MySqlCommand
{
CommandText = "Select * from Employee where EmpID = @EmpID"
};
cmd1.Parameters.Add($"@EmpID", MySqlDbType.VarChar).Value = 1234;
我想在处理请求时知道服务器端的查询表示。 更新后的逻辑(即第 2 点)是否会通过为 varchar 数据类型提供引号来形成查询?
【问题讨论】:
标签: c# mysql asp.net-core tidb