TiDB 索引没有被用于查询

问题描述

我使用 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.通过使用Add函数为字段提供数据类型来更新逻辑

                MySqlCommand cmd1 = new MySqlCommand
                {
                    CommandText = "Select * from Employee where EmpID = @EmpID"
                };

                cmd1.Parameters.Add($"@EmpID",MySqlDbType.VarChar).Value = 1234;

我想在处理请求时知道服务器端的查询表示。 更新后的逻辑,即第 2 点是否会通过为 varchar 数据类型提供引号来形成查询?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)