2012-11-02 103 views
1

閱讀mysql後,但無法找到解決方案。mysql從表1中選擇加入並按表2排序,優化文件夾

任何指針,將不勝感激。

我有2個表A,B 表A已將folderid映射到多個feedid(1到多個) 表B具有與其關聯的feedid和數據。

以下查詢給出了使用索引;使用臨時;使用filesort

SELECT A.feed_id,B.feed_id,B.entry_id 
FROM feed_folder A 
LEFT JOIN feed_data B on A.feed_id=B.feed_id 
WHERE A.folder_id=29 
AND B.entry_id <= 123 
AND B.entry_created <= '2012-11-01 21:38:54' 
ORDER by B.entry_created desc limit 0,20; 

有關如何避免臨時文件夾的任何想法。

以下是表結構

CREATE TABLE `feed_folder` (
    `folder_id` bigint(20) unsigned NOT NULL, 
    `feed_id` bigint(20) unsigned NOT NULL, 
    UNIQUE KEY `folder_id` (`folder_id`,`feed_id`), 
    KEY `feed_id` (`feed_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE `feed_data` (
    `entry_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `feed_id` bigint(20) unsigned NOT NULL, 
    `entry_created` datetime NOT NULL, 
    `entry_object` text, 
    `entry_permalink` varchar(150) NOT NULL, 
    `entry_orig_created` datetime NOT NULL, 
    PRIMARY KEY (`entry_id`), 
    UNIQUE KEY `feed_id_2` (`feed_id`,`entry_permalink`), 
    KEY `entry_created` (`entry_created`), 
    KEY `feed_id` (`feed_id`,`entry_created`), 
    KEY `feed_id_entry_id` (`feed_id`,`entry_id`), 
    KEY `entry_permalink` (`entry_permalink`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 
+0

您的查詢B中沒有語法錯誤沒有folder_id。 –

+0

進行了更改,這是一個錯字。它應該是A.folder_id – user1590071

回答

0

嘗試此查詢:

SELECT * FROM(SELECT 
A.feed_id,B.feed_id,B.entry_id 
FROM feed_folder as A 
INNER JOIN feed_data as B on A.feed_id=B.feed_id 
WHERE A.folder_id=29 
AND B.entry_id <= 123 
AND B.entry_created <= '2012-11-01 21:38:54')joinAndSortTable 
ORDER by B.entry_created desc limit 0,20; 

問題是別名,你忘了給as Aas B 我也提醒大家一下LEFT JOIN和RIGHT JOIN,INNER JOIN ... 要加入您選擇的所有記錄,使用INNER JOIN是一種解決方法。 因爲INNER JOIN可以加入完全訪問的所有列。

GOOD LUCK

相關問題