Nordall |
---|
Но как же FK? Он то должен работать на должном уровне!!! |
Проверка FK происходит в процессе изменения данных или в процессе создания FK. Если FK создан без проверки или как то криво, то существующие данные могут его нарушать. Если по внешнему ключу создан индекс, то FK для проверки использует этот индекс, а не таблицу.
Похоже, у вас индекс по aaa.id поломанный.
>>> Запрос типа select * from ddd where ddd.p_id not in (select aaa.id from aaa) то 0 строк.
>>> Но запрос
>>> select * from ddd left join aaa on (ddd.p_id=aaa.id) where aaa.id is null возвращает строки.
>>> Поля ddd.p_id и aaa.id is not null.
В первом запросе используется только индекс по aaa.id , потому как фактически написан select ddd.* .
Во втором запросе используется таблица aaa, потому как фактически написан select ddd.*, aaa.*.
Вот и вылезает несоответствие между индексом и таблицей.
Короче, копайте индекс по aaa.id. А клюки FK это следствие.