如果我有如下的oracle查询:
SELECT * FROM table_a where A = "1", B = "2", C = "3"
Run Code Online (Sandbox Code Playgroud)
此查询皮卡表-A的指标之一...没有索引必须对这些列的所有3?
我要问的是:
如果索引在A,B,C,D上怎么办?
如果索引在B,C上怎么办?
索引只能在A,B,C上被选中吗?
Oracle Cost Based Optimizer(CBO)尝试选择最便宜的表访问路径.单个表的访问路径包括索引范围扫描,索引完全扫描和表全扫描; CBO将估算每个计划的成本,并选择成本最低的计划.
1.如果指数在A,B,C,D上怎么办?
是的,Oracle可能会使用此索引 - 并且成本可能非常低,因为索引的前导列(其中3个)在查询中受到约束.
2.如果索引在B,C上怎么办?
是的,Oracle可能会使用此索引 - 并且成本可能非常低,因为索引的所有列都在查询中受到约束.
3.只有当它在A,B,C上时才能选择索引吗?
不,它不是独家的.是的,Oracle可能会使用此索引 - 并且成本可能非常低,因为索引的所有列都在查询中受到约束.
其他要考虑的因素:
*从表中选择(所有列).如果该表只有四列(A,B,C,D),则CBO可能更喜欢完全从(A,B,C,D)上的索引满足查询的计划而根本不访问该表.