mysql - 提高mysql查询的准确性

标签 mysql join

是否有任何方法可以提高以下查询的准确性?

SELECT DISTINCT a.localgeo, a.foreigngeo, b.lat, b.lng, c.lat, c.lng
FROM tbl_correlateddata a
JOIN tbl_geodetail b ON a.localgeo = b.code
JOIN tbl_geodetail c ON a.foreigngeo = c.code

我正在访问一个包含 2 个国家/地区代码的表格

localgeo|foreigngeo
--------------------
JP      |AD
JP      |AD
US      |HK
AD      |JP
HK      |US
AD      |JP
CN      |US

并尝试用另一个表中的经度和纬度值填充它

code|lat|lng
------------
JP  |1  |2
US  |3  |3
HK  |1  |4
AD  |3  |4
CN  |4  |4

结果是这样的

localgeo|lat|lng|foreigngeo |lat|lng|
------------------------------------
JP      |1  |2  |AD         |3  |4
US      |3  |3  |HK         |1  |4
HK      |1  |4  |US         |3  |3
AD      |3  |4  |JP         |1  |2
CN      |4  |4  |US         |3  |3

但是查询需要很多时间。有什么办法可以加快速度吗?

最佳答案

问题是您对所有字段都使用了 distinct,您没有制作 (),这会花费很多时间。尝试只对一列使用 distinct

像这样

    SELECT DISTINCT (a.localgeo), a.foreigngeo, b.lat, b.lng, c.lat, c.lng
    FROM tbl_correlateddata a 
    JOIN tbl_geodetail b 
      ON a.localgeo = b.code 
    JOIN tbl_geodetail c 
      ON a.foreigngeo = c.code

编辑:

     SELECT DISTINCT a,b,c FROM t

大致相当于:

     SELECT a,b,c FROM t GROUP BY a,b,c

所以你应该这样做

     SELECT a.localgeo, a.foreigngeo, b.lat, b.lng, c.lat, c.lng
    FROM tbl_correlateddata a 
    JOIN tbl_geodetail b 
      ON a.localgeo = b.code 
    JOIN tbl_geodetail c 
      ON a.foreigngeo = c.code
     GROUP BY a.localgeo ,a.foreigngeo

关于mysql - 提高mysql查询的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910455/

相关文章:

php - 使用 PHP 创建新页面?

MySQL 内部连接别名问题

SQL查询从一个表中获取数据,从另一表中只获取一行数据

mysql - 多个连接到两个保存 fk 的表

php - 我可以在 PHP 中混合使用 MySQL API 吗?

C# 从未知列表长度分配字段

php - 使用 PHP 将时间戳转换为可读的日期/时间

mysql - 从 MySQL 中选择关系

mysql 查询没有返回预期结果

mysql - 使用Select查询在mysql中创建更新脚本,语法问题?