如果我们在where条件中传递变量,MySQL查询很慢

时间:2017-11-02 13:46:05

标签: mysql

这很慢,需要1.003秒

set @POSTCODE = 'SL2 1AT';
select latitude, longitude from postcode.postcodelatlng where postcode = @POSTCODE;

这是快速的,需要.127秒

select latitude, longitude from postcode.postcodelatlng where postcode = 'SL2 1AT';

表格创建声明

CREATE TABLE `postcodelatlng` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `postcode` varchar(8) NOT NULL,
  `latitude` decimal(18,15) NOT NULL,
  `longitude` decimal(18,15) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_postcode` (`postcode`),
  KEY `latLong` (`latitude`,`longitude`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1738245 DEFAULT CHARSET=latin1;

请你帮忙,为什么会这样,我们可以做到解决这个问题。

2 个答案:

答案 0 :(得分:0)

:=the assignment operator in MySQL

set @POSTCODE := 'SL2 1AT';
select latitude, longitude from postcode.postcodelatlng where postcode = @POSTCODE;

第一行缺少一个冒号

答案 1 :(得分:0)

首先,我建议您使用InnoDB而不是MyISAM。 与latin1字段的比较导致相当大的性能开销。 而不是你可以使用以下。

SET @POSTCODE:= CONVERT('SL2 1AT' USING latin1);

如果你的客户端是utf8,但你的表是latin1.Now查询的运行速度和我预期的一样快。