1

mysql の投稿を読みましたが、解決策が見つかりませんでした。

任意のポインタをいただければ幸いです。

私は2つのテーブルA、Bを持っています。テーブルAには複数のfeedid(1から多数)にマップされたfolderidがあります。テーブル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
4

1 に答える 1

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;

問題はエイリアスにあり、与えるのを忘れています。また、LEFTJOINas Aas B RIGHTJOIN、INNER JOINについても思い出させてくれます...選択したすべてのレコードを結合するにINNER JOINは、Useingが回避策です。INNER JOINフルアクセスですべての列を結合できるため。

幸運を

于 2012-11-02T06:57:50.847 に答える