2014-01-31 2 views
2

Как извлечь несколько записей, сравнив уникальный идентификатор в mySQL.Как извлечь несколько записей, сравнив уникальный идентификатор в mySQL

У меня есть один файл Excel.

Который имеет запись 36k с уникальным идентификатором на каждой записи.

Уникальный идентификатор - это случайное число начинается с 11493 (минимум) до 258090 (максимум) - причина в том, что он извлекался на одном этапе из главной таблицы из 700 тыс. Записей.

Основная таблица в MySQL - PHPMYADMIN Более 700k записей

и мне нужно сравнить уникальный идентификатор с 700k таблицы уникальным идентификатором и получать все 36K записей только

В Excel файле и в таблице есть одна вещь, общий [UNIQUE ID]

Как я могу это достичь?

ответ

0

Простейший способ сделать это создать один простой запрос, как:

select * from TABLENAME where unique_id in (COMMA SEPARATED UNIQUE IDS); 

Предполагая, что вы знаете, как сделать их разделенные запятой в Ехчел.

Это все

+0

Он пытается получить 36 тыс. Записей. IN не будет эффективным. –

+0

@ArvindSridharan объясняет оба запроса: мой запрос будет проверять записи 700k, если unique_id не индексируется, если вы делаете индекс в unique_id, тогда только 36k. Теперь посмотрим, что ваш запрос рассмотрит 700k * 36k. Определите, какой из них эффективен? – Anubhav

+0

В разделе IN не используются индексы. эффективные индексы на временной таблице могут ускорить работу запроса. см. http://stackoverflow.com/a/6219545/728610 –

3

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

1) Создайте временную таблицу. Добавьте соответствующие индексы, чтобы ускорить запрос.

create temporary table record_ids (int id); 

2) Загрузить данные из файла Excel (экспорт в CSV) во временную таблицу

LOAD DATA INFILE "<path to your file>" 
INTO TABLE record_ids 
COLUMNS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES; 

3) получить записи, которые вы хотите, вступив с временной таблицей.

SELECT at.* 
FROM actual_table at 
     INNER JOIN record_ids ri 
       ON at.id = ri.id = at.id; 
Смежные вопросы