>Т.е. речь про: >select * from cont_res cr join contracts ct on cr.cont_id=ct.cont_id >where cr.serv_id=14 and cr.resource is null >?
Да >Твоя правда :-) Кстати, NOT NULL ты таки снять можешь (если там UK, а не >PK). Но не удалить PK, это да. А на что тогда версионность метаданных? Сервер имеет полное право работать в препарированном запросе по старой версии >Насколько я понимаю, тут засада в композитном индексе, где NULL - не >последний сегмент. Я недавно это объяснял Болтику, цитирую: >"Это особенность реализации нуллов в индексах. Для ASC-индексов нуллы >хранятся как ключи нулевой длины. Поэтому при поиске на частичное >соответствие (полей в индексе больше чем в запросе) нулл будет равен >любому другому ключу. Аналогия для индекса с 4 сегментами: >A = a and B = b and C = c : field like 'abc%' >A = a and B = b and C is null : field like 'ab%' >.е. нулл после сегмента B есть, но его при поиске не видно, т.к. это >ключ нулевой длины. Отсюда и шире выборка, больше чтений." >Таким образом, де-факто имеем поиск лишь по первому сегменту >композитного индекса, а им выбираются все 100% значений. Ну значит неправильное какое-то хранение индекса выбрано, если он приводит к неожиданным тормозам там, где их совсем не ожидаешь, и даже по плану не отследишь Сечас время такое, что на объемах экономить не надо. Диски гигантские, память дешевая. А вот скорость оптимизировать наоборот - надо. >Попробуй пересоздать композитный PK как DESC-индекс. В этом случае нуллы >хранятся в виде 0xFF и все должно работать как ожидается. В общем, я вышел из положения создав дополнительный индекс на CONT_RES по двум полям. Благо, сервер его успешно подхватил >Ну, или если ты заранее знаешь, что эта выборка по PK фиктивная, то >добавь в предикат для CONT_RES любое значения столбца CONT_ID, тогда >индексный ключ станет полным и нуллы начнут искаться (и не находиться). Да эта выборка используется как подзапрос другого запроса, и получается что в нее в 95% случаев должен попадать NULL, вот и заметил тормоза Спасибо за участие и консультацию :) P.S. Так ждем 3.0 с реальной многопроцессорностью, что аж сил нет :)

