Я попытался сравнить два столбца zipcode между двумя таблицами, чтобы увидеть, отсутствуют ли значения во втором.PHP array_diff VS mysql NOT IN
я первый хотел сделать это с MySQL, мой запрос был что-то вроде
'SELECT code FROM t1 WHERE t1 NOT IN (select code FROM t2)'
Но это было очень медленно, так что я попробовал другой путь: Я сделал два выбора, а затем сравнили результаты с array_diff()
.
С MySQL: несколько минут, а иногда врезаться
С PHP: менее чем за 1 секунду.
Может кто-нибудь объяснить эти различия? Является ли мой SQL-запрос неправильным?
Проверка того, какие значения отсутствуют в таблице (по сравнению с другой), может быть легко выполнена с помощью 'LEFT' или' RIGHT' 'JOIN', которые они только что сделали для таких действий .. альтернативно взгляните на это: http ://переполнение стека.com/questions/1733197/how-to-find-missing-value-between-two-mysql-tables – serjoscha
Насколько велика ваша вторая таблица 't2' и у вас есть индекс в столбце' code', попробуйте добавить это и посмотреть, что произойдет. Мое предположение, почему это так медленно в mysql, состоит в том, что у вас нет определенного набора индексов. Попробуйте запустить запрос EXPLAIN из вашего терминала и посмотреть, какие ключи используются, т.е. 'EXPLAIN SELECT code FROM t1 WHERE ta NOT IN (SELECT code FROM t2);' – Cyclonecode
Обе таблицы имеют около 50 000 строк. @serjoscha: Это хорошая идея. Пример, который я использовал, был найден в нескольких SO-потоках, поэтому он казался хорошим – FLX