Схема:
CREATE TABLE IF NOT EXISTS `tx_hep_homes_attributes_mm` (
`uid_local` int(11) NOT NULL DEFAULT '0',
`uid_foreign` int(11) NOT NULL DEFAULT '0',
`tablenames` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`sorting` int(11) NOT NULL DEFAULT '0',
KEY `uid_local` (`uid_local`),
KEY `uid_foreign` (`uid_foreign`),
KEY `uid_local_foreign` (`uid_local`,`uid_foreign`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Пример ввода:
INSERT INTO `tx_hep_homes_attributes_mm` (`uid_local`, `uid_foreign`, `tablenames`, `sorting`) VALUES
(2, 4, '', 3),
(2, 1, '', 2),
(2, 2, '', 1),
(1, 2, '', 5),
(1, 3, '', 4),
(1, 4, '', 3),
(1, 7, '', 2),
(1, 8, '', 1);
Запрос:
SELECT amm.uid_local,
amm.uid_foreign
FROM tx_hep_homes_attributes_mm amm
JOIN (SELECT 1 AS att_id
UNION
SELECT 4 AS att_id
UNION
SELECT 13 AS att_id
UNION
SELECT 22 AS att_id
UNION
SELECT 12 AS att_id)d1
ON d1.att_id = amm.uid_foreign
JOIN (SELECT 1 AS home_id
UNION
SELECT 2 AS home_id)d2
ON d2.home_id = amm.uid_local
ORDER BY uid_local
производит:
+------+---------------+-------------------+-------+------------------------------------------+--------------------+----------+-------------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+---------------+-------------------+-------+------------------------------------------+--------------------+----------+-------------+-------+---------------------------------+
| 1 | PRIMARY | <derived7> | ALL | NULL | NULL | NULL | NULL | 2 | Using temporary; Using filesort |
| 1 | PRIMARY | amm | ref | uid_local,uid_foreign,uid_local_foreign | uid_local_foreign | 4 | d2.home_id | 1 | Using where; Using index |
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 5 | Using where; Using join buffer |
| 7 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| 8 | UNION | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| NULL | UNION RESULT | <union7,8> | ALL | NULL | NULL | NULL | NULL | NULL | |
| 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| 3 | UNION | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| 4 | UNION | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| 5 | UNION | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| 6 | UNION | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| NULL | UNION RESULT | <union2,3,4,5,6> | ALL | NULL | NULL | NULL | NULL | NULL | |
+------+---------------+-------------------+-------+------------------------------------------+--------------------+----------+-------------+-------+---------------------------------+
Как вы видите, использует где, использует сортировку файлов, хотя это должно разрешаться из составного индекса.