我有以下三个表(实际上还有更多字段,但这应该可以让我了解我想要实现的目标):
log (
eventId INTEGER,
objectId INTEGER,
PRIMARY KEY (eventId)
)
objects (
objectId INTEGER,
typeId INTEGER,
PRIMARY KEY (objectId, typeId)
)
statusBits (
typeId INTEGER,
bitNumber INTEGER,
)
该log
表包含非常多的记录(500,000+),而其他表非常小。我可以使用以下查询加入表:
SELECT l.eventId, o.typeId, s.bitNumber
FROM log l, objects o, statusBits s
WHERE (l.objectId = o.objectId) AND (o.typeId = s.typeId)
此查询运行良好且快速。ORDER BY eventId
当我在最后添加一个子句时,它也运行得很快。但是,当我添加ORDER BY eventId, bitNumber
(因此按两个字段而不是一个字段排序)时,它变得非常缓慢。
如何优化我的查询以使其运行得更快?如果这有什么不同,我正在运行 Oracle 10g XE。
更新:
我已经尝试过了CREATE INDEX ON statusBits(bitNumber)
,但它似乎没有很大的效果。