从一个慢查询到MySQL字符集编码

11. 问题起源

最近在完成一个线上日志修复工作的过程中遇到了一个意想不到的慢查询。当时使用的SQL以及表结构其实都很简单,而且在关键的字段上也有索引,但是MySQL的执行计划就是跑出来了Range checked for each record (index map: 0x1)。如下为问题中的表结构定义和执行计划(删减了其他字段,留下了关键的部分):

Create Table: CREATE TABLE `Order1` (<br>  `orderid` varchar(255) COLLATE latin1_bin DEFAULT NULL,<br>  `productid` varchar(255) COLLATE latin1_bin DEFAULT NULL,<br>  KEY `productid` (`productid`)<br>) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin<br><br>