2016-04-06 54 views
0

也許某人在這裏可以幫助我/提供關於如何做某些事情的提示。我們在mySql中使用了兩個表,都是MyISAM,utf8。第一個表格保存所有對象的註冊,秒錶保存所有對象的附加信息,如名稱等。MySQL訂單從左列加入

表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 

還試圖從table2中選擇表1中的RIGHT JOIN,但這也行不通。

如何解決這個/得到這個快?

回答

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) 
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)