我有一个包含以下列的表:
CREATE TABLE example (
exid INT,
extype INT,
studentid INT,
(more columns)
)
该表将有数十万行,每条记录将具有不同的 exid、extype 和 studentid 值。虽然 studentid 和 exid 会有很多不同的值,但 extype 会有最大值。6 个值。该表将按以下方式连接:
SELECT ...
FROM example ex
LEFT JOIN otherTable1 ot1 ON ex.studentid = ot1.studentid
AND ex.exid = ot1.exid
AND ex.extype = 1
LEFT JOIN otherTable2 ot2 ON ex.studentid = ot2.studentid
AND ex.exid = ot2.exid
AND ex.extype = 2
你能建议我示例表上的哪些索引最适合此处的性能(我还应该添加用于连接的其他表将进入数百万行)?
例如,您应该使用 autotrace ( http://betteratoracle.com/posts/10-using-autotrace ) 对其进行基准测试。
如果您希望返回数百万行,那么我认为索引根本没有帮助。简单的全表扫描和散列连接是执行此类查询的最有效方式(https://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::P11_QUESTION_ID:9422487749968) .
将选择性最少的列放在第一位并使用键压缩可以减小索引大小并减少 IO 和 CPU 消耗(http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::P11_QUESTION_ID :8806017524595 )。
如果您只获取几行,则以下索引应该足够了: