Join больших таблиц...

Гравицапа

elbirret elcno
Join больших таблиц...

table1
id | foo
table2
id| prop_id| tb1_id

Надо выбрать из table1 такие значения, что бы для определённого table2.prop_id и tb1_id = table1.id в table2 не было записей. Выборка делается для того, что бы для тех table1.id, у которых нет записи в table2 c определённым prop_id сделать вставку с этим самым prop_id.

Делаю так
[SQL]SELECT t1.id, t1.foo, t2.prop_id FROM table1 t1 LEFT JOIN table2 t2 ON t1.id=t2.tb1_id AND t2.prop_id = 10 WHERE t2.prop_id IS NULL[/SQL]
Всё работает замечательно, но медленно при количестве записей в таблицах ~ 10 000

Можно ли как-нибудь по другому это сделать?

P.S. DELETE FROM table2 ...+ INSERT не предлагать
 
такое количество инсертов за какое время делается?
записи накапливаются?
 
такое количетво примерно 6-7 секнд делается, но вот селект этот крайне долго исполняется..даже из колснольного мускульного клиента
записи накапливаются
предположительное рабочее количество записей в table2 ~ 100 000-200 000
 
попробуй создать индксы отдельно на поля tb1_id и prop_id
или составные tb1_id,prop_id и prop_id,tb1_id
какие индексы испльзовать зависит от твоих данных, попробуй и увидишь, что лучше ...
 
Индексы не помогли, буду пробывать обойтись без джоинта.
Хотя странно как то...10 000 не такое большое число вроде для БД
 
упс, не то...1 мин..
Код:
+----+-------------+-------+------+---------------+-------+---------+---------------------------+-------+-------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+-------+---------+---------------------------+-------+-------------------------+
| 1 | SIMPLE | d | ALL | NULL | NULL | NULL | NULL | 10088 | Using where |
| 1 | SIMPLE | h | ref | first | first | 5 | const,test_database.d.id | 133 | Using where; Not exists |
+----+-------------+-------+------+---------------+-------+---------+---------------------------+-------+-------------------------+
P.S. Сорри, индексы всё-таки помогли...оно хотя бы работать стало шустрее
индекс first сделал на tb2.prop_id + tb2.tb1_id
 
Сверху