Работа с большими массивами

  • Автор темы Автор темы Artur
  • Дата начала Дата начала

Artur

Новичок
Работа с большими массивами

Цель - сравнить 2 таблицы по значениям в одном столбце (текстовый параметер), и удалить все совпадения
Столкнулся с проблемой, когда не работают большие массивы.

//формирует массив элементов из базы1
$q=mysql_query("select * from _base1");
while ($r=mysql_fetch_array($q)){ $base1[] = $r['field1'];}

//формирует массив элементов из базы2
$q=mysql_query("select * from _base2");
while ($r=mysql_fetch_array($q)){ $base2[] = $r['field1'];}

//создаёт массив элементов которые есть в базе2 но нет в базе1.
$result_mass1=array_diff ( $base2, $base1 );

Всё работает отлично до тех пор пока сравниваемые таблицы маленькие. При тестовом (200-300 записей) - всё ОК. А в рабочей версии (около 20.000 записей) видимо буксует.

Может кто посоветовать решение? Может сравнение через массив это плохое решение?
 
совершенно верно, ещё какое плохое.... всё это делается средствами mysql
запрос классический - на поиск одинаковых / различных записей в разных таблицах

[sql]
SELECT * FROM `t1` LEFT JOIN `t2` ON `t1`.`id` = `t2`.`id` WHERE `t2`.`id` IS NULL
[/sql]
 
Автор оригинала: zerkms
совершенно верно, ещё какое плохое.... всё это делается средствами mysql
запрос классический - на поиск одинаковых / различных записей в разных таблицах

[sql]
SELECT * FROM `t1` LEFT JOIN `t2` ON `t1`.`id` = `t2`.`id` WHERE `t2`.`id` IS NULL
[/sql]
Я уже пробовал и это решение. Но при 20.000 записей это работает сверх медленно.
 
Artur
из этого следует не то - что решение плохое, а что у тебя индексов нет на сравниваемых полях

ознакомься:
dev.mysql.com/doc/refman/4.1/en/explain.html
dev.mysql.com/doc/refman/4.1/en/mysql-indexes.html
 
Согласен, перегруженные массивы работают медленно, но
изначально, работая с массивами я воспользовался бы ф-ей
array_diff().

p.s.: для ее корректной работы ее нужно использовать в паре с array_merge:
$new_file=array_merge(array_diff($file_name,$mas,$list_file));
 
Сверху