CREATE TABLE TEST
(
ID1 INTEGER,
ID2 INTEGER,
ID3 INTEGER,
X NUMERIC(18,2),
CONSTRAINT PK_TEST PRIMARY KEY(ID1, ID2, ID3)
);
CREATE INDEX IXA_TEST__X ON TEST(X);
CREATE INDEX IXA_TEST__ID1_X ON TEST(ID1, X);
--------------------------------------------------------------------------------
SELECT * FROM TEST T WHERE T.ID1=1 AND T.X>0
PLAN (T INDEX (IXA_TEST__ID1_X))
index IXA_TEST__ID1_X is used
--------------------------------------------------------------------------------
SELECT * FROM TEST T WHERE T.ID1=1 AND T.X>0 ORDER BY T.ID1, T.ID2, T.ID3
PLAN (T ORDER PK_TEST INDEX (IXA_TEST__X))
index IXA_TEST__X - suboptimal
--------------------------------------------------------------------------------
as you can see adding ORDER BY which consume some index (PK_TEST)
cause suboptimal choice of index (IXA_TEST__X)
--------------------------------------------------------------------------------
if query is changed to order by not by index
SELECT * FROM TEST T WHERE T.ID1=1 AND T.X>0 ORDER BY T.ID1+0, T.ID2, T.ID3
PLAN SORT (T INDEX (IXA_TEST__ID1_X))
It can be releated to
CORE-5795 but this can be different case