У меня есть две таблицы для объединения. TABLE_A (содержит столбцы «a») и TABLE_BC (содержит столбцы «b» и «c»).
На TABLE_BC есть условие. Две таблицы объединены строкой 'rowid'.
Что-то вроде:
SELECT a, b, c FROM main.TABLE_A INNER JOIN main.TABLE_BC WHERE (b > 10.0 AND c < 10.0) ON main.TABLE_A.rowid = main.TABLE_BC.rowid ORDER BY a;
В качестве альтернативы:
SELECT a, b, c FROM main.TABLE_A AS s1 INNER JOIN (SELECT rowid, b, c FROM main.TABLE_BC WHERE (b > 10.0 AND c < 10.0)) AS s2 ON s1.rowid = s2.rowid ORDER BY a;
Мне нужно сделать это пару раз с другим TABLE_A, но TABLE_BC не изменится ... Поэтому я мог бы ускорить процесс, создав временную базу данных в памяти (mem) для постоянной части запроса.
CREATE TABLE mem.cache AS SELECT rowid, b, c FROM main.TABLE_BC WHERE (b > 10.0 AND c < 10.0);
с последующим (много)
SELECT a, b, c FROM main.TABLE_A INNER JOIN mem.cache ON main.TABLE_A.rowid = mem.cache.rowid ORDER BY a;
Я получаю один и тот же набор результатов из всех приведенных выше запросов, но последний вариант, безусловно, самый быстрый.
Проблема в том, что я хотел бы не разбивать запрос на две части. Я ожидал бы, что SQLite сделает для меня то же самое автоматически (по крайней мере, во втором сценарии), но, похоже, этого не происходит ... Почему это так?
Спасибо.