我有一个带有VARCHAR(20)
作为非唯一索引的表。如果我用SET @varname = "XYZ"
为它声明一个变量,则不使用索引。
我尝试将""
更改为''
,
我试图在SET语句中将=
更改为:=
,
我尝试使用=
和LIKE
进行查询。
CREATE TABLE `table_name` (
`ColumnID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`Time` DATETIME NOT NULL,
`indexed_varchar_field ` VARCHAR(20) DEFAULT NULL,
UNIQUE KEY `ColumnID` (`ColumnID`),
KEY `idx_varchar_field` (`indexed_varchar_field `)
) ENGINE=InnoDB AUTO_INCREMENT=20268516 DEFAULT CHARSET=utf8;
SET @VAR_NAME = 'XYZ';
SELECT * FROM table_name WHERE indexed_varchar_field = @VAR_NAME;
实际表中有更多列,indexed_varchar_field
是一个序列号,我希望拥有该计算机的所有数据集。如果没有索引,则需要花费一分钟以上的时间;使用索引,则需要不到一秒钟的时间。
如果我尝试不使用变量,它将使用索引并且速度很快。