Вот мой запрос, который работает с помощью двух подзапросов и временных таблиц:Повышение производительности подзапроса в MySQL
select visit.pid, visit.pidvnum, visit.hpv16, visit.qc_hst
FROM visit,
(select distinct x.pid from
(select pid from visit where visit.qc_hst = 1) x,
(select pid from visit where visit.hpv16 = 1) y
where x.pid = y.pid) as subtbl
where visit.pid = subtbl.pid
AND (visit.qc_hst = 1 OR visit.hpv16 =1);
Есть ли способ, чтобы переписать этот запрос, чтобы исключить один или оба из подзапросов? Я также использовал предложение IN с теми же двумя подзапросами, но это еще хуже. Я не могу индексировать такие поля, как qc_hst и hpv16, поскольку их десятки, и любой из них потенциально может быть частью запроса.
Вот ссылка sqlfiddle: http://sqlfiddle.com/#!2/68bd6/6/0
Большое спасибо - я действительно стучал головой о стену на этом ...
Правильно - оба условия должны выполняться на pid (который является родительским ключом), но не на pidvnum (который является основным ключом). Ваше решение выглядит довольно хорошо - «объяснение» выглядит чертовски много лучше! Тем не менее, это немного «многословие», что сделает его общее кодирование в Java немного сложным. Я дам вам знать, как это работает завтра. – MikeBopf
Хорошо, похоже, что он работает довольно спокойно, даже когда присоединяется к нескольким более нисходящим столам - вот что меня убило. Меня устраивает! – MikeBopf