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 не предлагать
 

chira

Новичок
такое количество инсертов за какое время делается?
записи накапливаются?
 

Гравицапа

elbirret elcno
такое количетво примерно 6-7 секнд делается, но вот селект этот крайне долго исполняется..даже из колснольного мускульного клиента
записи накапливаются
предположительное рабочее количество записей в table2 ~ 100 000-200 000
 

chira

Новичок
попробуй создать индксы отдельно на поля tb1_id и prop_id
или составные tb1_id,prop_id и prop_id,tb1_id
какие индексы испльзовать зависит от твоих данных, попробуй и увидишь, что лучше ...
 

Гравицапа

elbirret elcno
Индексы не помогли, буду пробывать обойтись без джоинта.
Хотя странно как то...10 000 не такое большое число вроде для БД
 

Гравицапа

elbirret elcno
упс, не то...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
 
Сверху