这很慢,需要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;
请你帮忙,为什么会这样,我们可以做到解决这个问题。
答案 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查询的运行速度和我预期的一样快。