gpt4 book ai didi

MySQL 从左连接开始对列进行排序

转载 作者:行者123 更新时间:2023-11-29 21:10:08 25 4
gpt4 key购买 nike

也许这里有人可以帮助我/提示如何做一些事情。我们在 mySql 中使用 2 个表,都是 MyISAM,utf8。第一个表保存对象的所有注册,第二个表保存所有对象以及名称等附加信息。

表 1 和表 2 之间的匹配将基于两个表中的代码列。为什么没有id?因为 table1 是由外部系统填充的,所以它不知道它链接到的对象的 id。此外,我们还可以注册表 2 中不可用但需要在表 1 中注册的对象。

表 1 - 注册:(+/- 33.000.000 行)

+-------------+
| id |
| code |
| datetime |
+-------------+

表2 - 对象:(+/- 55.000 行)

+-------------+
| id |
| code |
| name |
| description |
| etc. |
+-------------+

两个表在某些列上都有索引。常规选择查询效果很好。它在 0.0017 秒内创建了 32.382.742 行的结果。

SELECT * FROM table1 LEFT JOIN table2 on table2.code = table1.code

当我对表 1 中的列进行排序时,仍然可以。它在 0.0179 秒内创建了 32.382.742 行的结果。

SELECT * FROM table1 LEFT JOIN table2 on table2.code = table1.code ORDER BY table1.datetime

当我对表 2 中的列进行排序时,情况非常糟糕。 MySQL 的 SHOW processlist; 显示正在创建一个临时表,并且在 300 秒内没有停止,因此我们杀死了 MySQL。

SELECT * FROM table1 LEFT JOIN table2 on table2.code = table1.code ORDER BY table2.name

还尝试从表 2 中选择表 1 上的 RIGHT JOIN,但这也行不通。

如何解决这个问题/快速解决这个问题?

最佳答案

您使用的是LEFT JOIN,因此 DBMS 默认对 Table2 的列为 NULL 的行进行排序。不确定这是否与您的问题有关,但您可以尝试像这样扩展您的 ORDER BY 子句

SELECT * 
FROM table1 LEFT JOIN table2 on table2.code = table1.code
ORDER BY table2.name, table1.datetime

或者(不确定这是否有效)

SELECT * 
FROM table1 LEFT JOIN table2 on table2.code = table1.code
ORDER BY ISNULL(table2.name,table1.datetime)

关于MySQL 从左连接开始对列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36452415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com