2010-08-04 3 views
3

В моем веб-приложении я хочу узнать, какие из друзей пользователя в Twitter уже существуют в системе ... В настоящее время я занимаюсь получением списка идентификаторов Twitter, которые пользователь следующее (Twitter API возвращает идентификаторы 5000 в то время), и делает:SELECT IN для большого набора

SELECT userId FROM users WHERE userId IN (COMMA_SEPARATED_LIST_OF_IDs); 

Я не чувствую себя комфортно об этом запросе, потому что, как пользователи таблица растет, это может оказаться горлышком бутылки. Я тоже не хочу оптимизировать досрочно, так же как я должен это делать?

Обновление: Я использую MySQL.

+1

Какую базу вы используете? –

+0

Вы действительно имеете в виду * сколько * или вы действительно имеете в виду *, который *? –

+0

Я имел в виду, кто редактировал вопрос. – jack33

ответ

2

Вы можете создать новую таблицу и начать хранить все идентификаторы твиттера, которыми следуют ваши пользователи. Затем определение того, кто уже находится в вашей системе, будет простым объединением индексированных столбцов. Вы можете использовать API Twitter для загрузки и обновления этой таблицы по своему усмотрению.

+0

Были бы накладные расходы на создание временной таблицы, выполнение объединения, а затем удаление ее лучше, чем при использовании SELECT IN (expr), где expr может иметь до 5000 значений? В настоящее время я не нуждаюсь в постоянной поддержке следующей таблицы. – jack33

+0

Я бы не рекомендовал, чтобы временная таблица выполнялась каждый раз, когда она отмечена, но вы можете ее протестировать и посмотреть, как она выполняется. Несмотря на то, что вам не нужно постоянно хранить данные, я думаю, вы не найдете причин не останавливаться на достигнутом. – Fosco

3

два подхода:

  1. SELECT IN (expr) имеет возможность иметь выражение SELECT для expr. То есть база данных может обрабатывать большое количество данных здесь.

  2. Используйте соединение.

1

Я предполагаю, что user.userId является вашим основным ключом. Если это так, он уже будет проиндексирован, поэтому поиск должен быть уже эффективным. Ожидаете ли вы, что ваш COMMA_SEPARATED_LIST_OF_IDS будет расти без причины?

+0

Щебетать дает userIds в пакетах 5k в случае, если пользователь будет следовать более 5000 человек. Таким образом, COMMA_SEPARATED_LIST_OF_IDS будет иметь максимальное количество 5000 идентификаторов. – jack33

Смежные вопросы