也许有人在这里可以帮助我/暗示如何做一些事情。我们在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中选择右表,但是这也不会起作用。
如何解决这个/快速得到这个?
答案 0 :(得分:0)
您正在使用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)
答案 1 :(得分:0)
尝试以下查询:
Select * from
(SELECT * FROM user_product ORDER BY user_product.user_product_id DESC) as tempPost
LEFT JOIN product_like on (product_like.user_product_id = tempPost.user_product_id)