我的表架构:
我的上表有~10L数据。在使用EXPLAIN时,它显示为,
由此,类型显示所有,额外显示使用位置和行不在 O(1)。但是,要搜索主键,类型应该 const ,行应该在 O(1)? ?我无法找出问题,导致查询速度变慢。
答案 0 :(得分:2)
当您将要查找的值作为数字传递时,id
字段为varchar。
这意味着mysql必须执行隐式数据转换,will not be able to use the index用于查找值:
为了比较字符串列和数字,MySQL不能使用 列上的索引可以快速查找值。如果str_col是 索引字符串列,执行时不能使用索引 在以下语句中查找:
SELECT * FROM tbl_name WHERE str_col=1;
原因在于 有许多不同的字符串可以转换为值1,例如 作为' 1',' 1',或' 1a'。
将id
字段转换为数字或将值作为字符串传递。
答案 1 :(得分:0)
由于您的id列是varchar,因此您需要在搜索时提供String。
尝试,id= '123456'
原因: 由于您要将varchar列与Int进行比较,因此它首先将所有行转换为Int,然后将其与123456(int)匹配。