-1

2 つのテーブルを作成します。

CREATE TABLE IF NOT EXISTS `table2` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `hash_id` char(24) NOT NULL DEFAULT '0',
  `name` varchar(64) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `hash_id` (`hash_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `table1` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `table2_id` bigint(20) unsigned DEFAULT NULL,
  `name` varchar(40) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `table2_id` (`table2_id`),
  CONSTRAINT `table1_ibfk_1` FOREIGN KEY (`table2_id`) REFERENCES `table2` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

目標はtable1table2対応するtable2_id. LEFT JOIN を使用した次のクエリは、まさに私が望むものを提供します。

SELECT t1.id, p1.hash_id, p1.name
FROM table1 as t1
LEFT JOIN (
 SELECT id,name,hash_id FROM table2)
 as p1
ON t1.table2_id = p1.id
WHERE t1.id IN ('1','3')

しかし、あまり効率的ではないようです。どのように最適化できますか?または、同等のクエリをアドバイスできますか?ここで説明の結果を見ることができます。http://sqlfiddle.com/#!2/5502f/13/0

4

2 に答える 2