2015-08-01 2 views
0

Я использую PHP и под локальным хостом, используя Wamp. У меня есть две таблицы из моей базы данных, у которых есть огромные данные, почти 13 000 плюс каждая таблица. Я хочу проверить, существует ли NameFromA из TableA в NameFromB из TableB. У меня этот код работает, когда я пытаюсь использовать небольшой объем данных около 100 данных.Сравнение огромных данных из 2 таблиц

SELECT * FROM TableA WHERE EXISTS (SELECT * FROM TableB WHERE NameFromA = NameFromB) 

Моя проблема в том, что я пытаюсь запустить его и сравнивая данные 13 000 плюс ничего не происходит. Он не имеет выхода.

+1

Может быть это занимает много времени, чтобы сделать такой opeartion. С моей точки зрения, 13000 - это очень маленький объем данных. Вы также можете выполнить повторный запрос. –

+0

@BogdanBogdanov Вы можете помочь мне перепроектировать мой запрос. Я не знаю, как это сделать. – mar

+1

13000 записей не являются «огромными» любыми способами. Компьютеры очень быстрые. –

ответ

1

Попробуйте это:

SELECT 
    TableA.* 
FROM 
    TableA 
    INNER JOIN TableB ON (TableA.NameFromA = TableB.NameFromB) 

Если он по-прежнему медленно, может быть у вас есть проблемы в БД или время слишком короткое время ожидания.

Вы также можете попробовать запустить это в менеджере MySql, чтобы узнать, сколько времени займет этот запрос.

Еще одна вещь. Данные, которые вы должны получить, должны быть отправлены на веб-сервер. Если ваша таблица содержит много данных для каждой строки, и есть много строк, это также потребует времени.

EDIT:

Ok @mar. Вы должны сделать небольшое устранение неполадок, чтобы найти, где проблема.

Во-первых: если ваш компьютер достаточно мощный. Потому что для обычных ПК и серверов 13k записи ничего.

Во-вторых: вы уверены, что есть хотя бы одно имя из таблицы A, которое представлено в таблице B?

В-третьих: попробуйте запустить запрос во внешнем инструменте SQL - не в php. Если он быстро установит правильный набор, то проблема находится в php.

+2

Не должно ли это быть ... ... ПРИСОЕДИНЯЙТЕСЬ В БЛОКЕ (A.a = B.b)?? –

+0

Невозможно выполнить запрос. – mar

+0

10x, @Sverri M. Olsen. Я спешил объяснить ответ, поэтому сделал эту очень тупую ошибку. –

1

Создать индекс на колонке NameFromA в TableA и NameFromB в TableB.

Try ниже запроса:

SELECT a.* 
FROM TableA AS a, TableB AS b 
WHERE a.NameFromA = b.NameFromB 
+0

Замените '*' на 'a. *'. Вопрос требует возврата данных только из таблицы 'a'. –

+0

Отредактировано мое сообщение. спасибо :) – Samir

+0

@ Самир, кстати, я использую вамп. Только локальный – mar

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