Есть таблица, содержащая около 500 000 записей. Среди них, аккуратно разбросано около 100 000 записей удовлетворяющих некоторому условию, говорящему о том, что запись должна быть обработана. Эти записи должны быть извлечены по одной.
Не мудурствуя лукаво, я написал запрос:
Все работает, все счастливы, вот только при исполнении в MSSQL этот запрос работает 1574 мс, а в ORACLE 2632 мс.
Причем реально по условию работы, мне нет необходимости искать именно MIN, мне нужна любая запись, удовлетворяющая условию.
Ради экспиремента поправил запрос, написав:
Время работы на MSSQL составило 141 мс!!!!
Понятно, что ORACLE такую фичу не держит. Нарыл ORACL-евую фичу "ROW_NUMBER() OVER ". Результаты не утешительны. Я так понимаю, что они связаны с тем, что ORACLЕ все-таки строит полный рекордсет, а потом отбрасывает лишнее.
Господа, выручайте!!! Нужна конструкция, которая будет работать и в MSSQL и в ORACLE. Желательно с эффективностью "TOP 1".
Не мудурствуя лукаво, я написал запрос:
Код |
---|
SELECT Min(nPayments_Id) FROM vw_sspDischargePaymentId WHERE (nStatus_Id = 9 OR nStatus_Id = 8 OR nStatus_Id = 19 OR nStatus_Id = 11 OR (nStatus_Id = 3 ) OR nStatus_Id = 22 OR nStatus_Id = 20 OR (nStatus_Id = 18 )) AND (nTrGroup_Id = 2 OR nTrParent_Id = 2) |
Все работает, все счастливы, вот только при исполнении в MSSQL этот запрос работает 1574 мс, а в ORACLE 2632 мс.
Причем реально по условию работы, мне нет необходимости искать именно MIN, мне нужна любая запись, удовлетворяющая условию.
Ради экспиремента поправил запрос, написав:
Код |
---|
SELECT TOP 1 nPayments_Id FROM vw_sspDischargePaymentId WHERE (nStatus_Id = 9 OR nStatus_Id = 8 OR nStatus_Id = 19 OR nStatus_Id = 11 OR (nStatus_Id = 3 ) OR nStatus_Id = 22 OR nStatus_Id = 20 OR (nStatus_Id = 18 )) AND (nTrGroup_Id = 2 OR nTrParent_Id = 2) |
Время работы на MSSQL составило 141 мс!!!!
Понятно, что ORACLE такую фичу не держит. Нарыл ORACL-евую фичу "ROW_NUMBER() OVER ". Результаты не утешительны. Я так понимаю, что они связаны с тем, что ORACLЕ все-таки строит полный рекордсет, а потом отбрасывает лишнее.
Господа, выручайте!!! Нужна конструкция, которая будет работать и в MSSQL и в ORACLE. Желательно с эффективностью "TOP 1".