整理一下Oracle数据查询索引命中情况,仅供参考,有问题欢迎指出修正:
创建测试表:
CREATE TABLE TEST_HZ
(
A VARCHAR(20),
B VARCHAR(20),
C VARCHAR(20)
);
插入数据: 本人比较懒,然后就直接建序列插数据
create sequence seq_test_hz_a
start with 1
increment by 1
maxvalue 99999999999999999
nominvalue
nocycle
nocache;
create sequence seq_test_hz_b
start with 1
increment by 1
maxvalue 99999999999999999
nominvalue
nocycle
nocache;
create sequence seq_test_hz_c
start with 1
increment by 1
maxvalue 99999999999999999
nominvalue
nocycle
nocache;
INSERT INTO TEST_HZ VALUES(seq_test_hz_a.nextval,seq_test_hz_b.nextval,seq_test_hz_c.nextval)
直接跑,想要多少条数据就跑多少次就好
**************** 对A,B,C只创建联合索引 IDX_ABC **********************
CREATE INDEX IDX_ABC ON TEST_HZ (A,B,C);
1、直接查询 :未命中索引
2、以A,B,C为查询条件,命中联合索引
3、以多个字段作为查询条件 全部命中联合索引
************* 分别每个字段创建索引 *****************
CREATE INDEX IDX_A ON TEST_HZ (A);
CREATE INDEX IDX_B ON TEST_HZ (B);
CREATE INDEX IDX_C ON TEST_HZ (C);
条件字段皆有索引的情况下,根据索引名称排序,优先走排序在前面的(可自行验证)
以上内容为个人总结,若有问题请指出修改,谢谢。