LEFT JOIN или REGULAR JOIN, и как сравнить таблицу MySql с массивом? Нужна производительность! - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть шесть таблиц: t1, t2, t3, t4, t5, t6.И у меня также есть одна главная таблица: main_table.ИТОГО 7 ТАБЛИЦ!

Теперь я использую SOLR для поиска объявлений, и результаты от solr помещаются в массив.Результатами массива являются ID: nrs, которые я использую для сопоставления с теми же ID: s в MySql.

Первый столбец ВСЕХ таблиц в MySql называется classic_id.

Если пользователь ищет"cars", тогда Solr найдет все объявления о машинах, поместит id: s в массив и, наконец, сравнит основную таблицу MySql, чтобы она соответствовала всем значениям в таблице t1 (которая является таблицей автомобилей), где класс_объявления одинаков в обеих таблицах

Сначала выводится массив результатов SOLR, затем:

SELECT * FROM classified, t1 WHERE classified.ad_id IN ('$solr_id_arr_imploded') AND classified.classified_id=t1.classified_id

Мой вопрос: это как мне это сделать?Это как я должен присоединиться здесь, или использовать левое соединение?Есть ли более быстрый способ сравнения с массивом?

таблица t1 может быть пустой, если нет объявлений для автомобилей ...

Помните, запрос может стать очень очень долго, например, если SOLR возвращает 10000 совпадений, то будет возвращен массив из 10000 идентификаторов, которые выглядят так: bmw_m3_low_miles_8948939

Спасибо

1 Ответ

1 голос
/ 25 февраля 2010

Альтернативой IN является создание временной таблицы, заполнение ее идентификаторами и выполнение внутреннего соединения. Убедитесь, что другие таблицы имеют индекс на classified_id. Для сравнения параметров используйте EXPLAIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...