MySQL在主键上搜索时使用了ALL Type

时间:2017-03-07 14:22:55

标签: mysql performance innodb

我的表架构:

This is my Table Schema

我的上表有~10L数据。在使用EXPLAIN时,它显示为,

enter image description here

由此,类型显示所有额外显示使用位置不在 O(1)。但是,要搜索主键,类型应该 const 应该在 O(1)? ?我无法找出问题,导致查询速度变慢。

2 个答案:

答案 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)匹配。