mysql select from table 1 join and order by table 2 优化文件排序

标签 mysql temporary filesort

阅读 mysql 帖子但找不到解决方案。

如有任何指点,我们将不胜感激。

我有 2 个表 A,B 表 A 有 folderid 映射到多个 feedid(1 到很多) 表 B 具有与之关联的 feedid 和数据。

下面的查询给出了Using index;使用临时的;使用文件排序

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;

问题出在 alias 上,你忘了给 as Aas B 我还提醒您有关 LEFT JOIN 和 RIGHT JOIN、INNER JOIN 的信息... 要加入您选择的所有记录,使用 INNER JOIN 是一种解决方法。 因为 INNER JOIN 可以连接所有具有完全访问权限的列。

祝你好运

关于mysql select from table 1 join and order by table 2 优化文件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13190092/

相关文章:

php - PHP 中的数据库错误处理

mysql - 我应该使用 MEMORY (HEAP) 引擎还是 MyISAM 引擎创建 Mysql 表?

c++ - 为什么非常量引用不能绑定(bind)到临时对象?

MYSQL 在简单查询中使用 ORDER BY 索引列时使用文件排序

php - 创新数据库 : Create a many to many relationship between mysql tables

php - 如何更新用于输入学生分数的表 foreach Student Id php mysql 中的每个分数

C 条件增量

java - PreparedStatement 只对数据库进行临时更改还是可以将其永久更改?

android - 如何在 Android 中按文件名或日期按升序或降序对文件或文件夹进行排序?

mysql单表SELECT查询ORDER BY导致FILESORT