My Mysql select查询每次运行时都会运行得较慢

My Mysql select查询每次运行时都会运行得较慢,mysql,database,optimization,Mysql,Database,Optimization,我有两张桌子,人和后编码我有大约2300条关于人的记录,包括他们的邮政编码,还有两个关于纬度和纬度坐标的空栏 邮政编码是一个大约160万行的表格,包含英国的每个邮政编码及其各自的坐标。 我试图通过匹配邮政编码来填写人员表中的坐标。如果不为每个人使用大约0.15秒的限制,则该方法可以正常工作。不幸的是,一旦我设置了限制,每次运行查询时,执行时间几乎翻了一番 SELECT people.ID, people.Postcode, postcodelatlng.latitude, postcodelat

我有两张桌子,后编码
我有大约2300条关于人的记录,包括他们的邮政编码,还有两个关于纬度和纬度坐标的空栏

邮政编码是一个大约160万行的表格,包含英国的每个邮政编码及其各自的坐标。

我试图通过匹配邮政编码来填写人员表中的坐标。如果不为每个人使用大约0.15秒的限制,则该方法可以正常工作。不幸的是,一旦我设置了限制,每次运行查询时,执行时间几乎翻了一番

SELECT people.ID, people.Postcode, postcodelatlng.latitude, postcodelatlng.longitude 
FROM people 
INNER JOIN postcodelatlng 
ON people.Postcode=postcodelatlng.postcode 
LIMIT 30

我建议添加两个索引,因为每行0.15秒似乎是一个很高的数字。每个邮政编码字段上有一个:

CREATE INDEX ppl_postcode ON people(Postcode) using HASH;
CREATE INDEX postcode_ll ON postcodelatlng(postcode) using HASH;

它现在应该运行得更快。

包括您的表结构,以及定义的键和索引(+一些示例数据),可能会有所帮助。根据我很久以前使用MySQL的经验,这些问题是由于设置缓冲区太大而导致的100%内存碎片。我可能完全错了。但是如果您发布“show variables”和“show stats”的输出,这可能会有所帮助。由于没有ORDER BY,您试图如何处理该限制,它可能是完全随机的。您可能还需要在mySQL中检查
EXPLAIN
。你是个救命的家伙。我被困在这上面太久了@请记住规则,=的每一侧都需要一个性能索引。我喜欢Boppy在索引中使用哈希。哈希?MySQL中没有这样的东西(除了ENGINE=MEMORY`)。无论如何,BTree是一个很好的替代品。