簡體   English   中英

mysql從表1選擇連接並按表2排序,優化文件排序

[英]mysql select from table 1 join and order by table 2 , optimization filesort

閱讀mysql的帖子,但找不到解決方案。

任何指針將不勝感激。

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

以下查詢給出了使用索引; 使用臨時; 使用文件排序

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

試試這個查詢:

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可以連接具有完全訪問INNER JOIN所有列。

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM