转换为CHAR导致VARCHAR列上的索引不起作用

时间:2019-01-15 09:36:26

标签: mysql database-performance

CREATE TABLE [dbo].[receive_scans] (
[Id]                   INT          IDENTITY (1, 1) NOT NULL,
[barcode]              VARCHAR (50) NOT NULL,
[record_created]       DATETIME     DEFAULT (getdate()) NULL,
[cart_id]              VARCHAR (15) NULL,

列a为VARCHAR类型,我已经在其上创建了索引。第一个使用索引,但是第二个不使用。有任何线索吗?

我怀疑MySQL可能将CHAR和VARCHAR作为两种不同的类型,因此我将a列更改为CHAR,并且索引也无效。

1 个答案:

答案 0 :(得分:0)

听起来像CHARACTER SETCOLLATION问题。请提供:

SHOW VARIABLES LIKE 'char%';
how you are connecting to the database
SHOW CREATE TABLE table1;

答案可能是更改CONVERT

CONVERT(1, CHAR  charset utf8)

什么是 real 查询;可能还有其他更适合您的情况的方法。使用CONVERT是一种浪费;让我们开始吧。

要查看转化,请执行

EXPLAIN FORMAT=JSON SELECT ...