📄 多字段索引测评结果.txt
字号:
--对于多个子段组成的索引,测试分析其结果
SQL> DROP TABLE PERSON;
表已丢弃。
SQL> create table person (id number(10),name varchar2(20));
表已创建。
--建立基于id,name的ind_2-------------------------------------------------
SQL> CREATE INDEX ind_2 on person(id,name);
索引已创建。
SQL> --data insert
SQL> declare
2 n_loop number;
3 s_time date;
4 --s_time varchar2;
5 e_time date;
6 begin
7 select sysdate into s_time from dual ;
8 for n_loop in 1..100000 loop
9 insert into person values(n_loop,'name'||n_loop);
10 commit;
11 end loop;
12 select sysdate into e_time from dual ;
13 dbms_output.put_line(to_char((e_time),'hh:mi:ss'));
14 dbms_output.put_line(to_char((s_time),'hh:mi:ss'));
15 end;
16 /
PL/SQL 过程已成功完成。
SQL> analyze table person compute statistics;
表已分析。
--使用两字段index的第2字段 name--------------------------------------------------
SQL> explain plan for select * from person where name='name123';
已解释。
SQL> select cost, operation from plan_table;
COST OPERATION
---------- ------------------------------
42 SELECT STATEMENT
42 TABLE ACCESS
SQL> delete from plan_table;
已删除2行。
SQL> explain plan for select * from person where id='123';
已解释。
--使用两字段index的第1字段 id--------------------------------------------------
SQL> select cost, operation from plan_table;
COST OPERATION
---------- ------------------------------
2 SELECT STATEMENT
2 INDEX
结论:
只有在id出现在where 子句中,才启动ind_2
对于多个子段组成的索引,当索引包括的第一个字段出现在where子句中,dbms自动调用索引。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -