网站开发计划时间,3d室内效果图制作公司,四平网站公司,重庆交通建设集团有限公司网站1 顺序扫描#xff08;Sequential scan#xff09;#xff1a;数据库服务器按照物理顺序读取表中的所有记录。
常发生在表上无索引或者数据量很少或者一些无法使用索引的sql语句中
2 索引扫描#xff08;Index scan#xff09;#xff1a;数据库服务器读取索引页#…1 顺序扫描Sequential scan数据库服务器按照物理顺序读取表中的所有记录。
常发生在表上无索引或者数据量很少或者一些无法使用索引的sql语句中
2 索引扫描Index scan数据库服务器读取索引页并通过相应的 ROWID 来读取相关的记录。
3 键值扫描Key-only index scan如果读取的相关数据包含在索引节点中数据库服务器就只需读取索引不需要再去读取相应的数据页。
4 键优先扫描Key-first index scan键优先扫描是一种索引扫描它首先使用索引键过滤器来减少查询读取的数据量。
5 自动索引扫描Auto-index scan自动索引扫描特性允许数据库服务器在一个或多个字段上自动创建临时索引数据库服务器通过这个临时索引读取相应的数据。这个临时索引只在查询过程中生效。
6 多路径扫描 skip-scan当数据表上有多个查询字段时优化器有可能会选择多路径扫描即同时扫描多字段上的索引 在对所有扫描命中的rowID 取交集
7 索引反转 在创建索引时默认为升序排序当sql语句中存在 降序排序时会反转索引
8 rowid扫描 直接读取位于指定物理位置由 ROWID 指定的数据行
9 跳过-重复-索引扫描skip-duplicate-index此种扫描模式大多发生在索引嵌套循环的半连接中例如使用 exists子查询时内表在扫描到结果时则停止继续扫描
例如
create table ti(c1 int,c2 varchar(50)); insert into ti select level,sys_guid() from dual connect by level 1000;
create index index_ti_c1 on ti(c1);
select c1 from ti where 11
此时发生顺序扫描 执行 select * from ti where c1 125时发生索引扫描 执行 select c1 from ti where c1 125时发生键值扫描 create table tl(c1 int,c2 int,c3 varchar(50));
insert into tl select level,level 100,sys_guid() from dual connect by level 100000;
create index index_tl_c12 on tl(c1,c2);
select /*INDEX(tl index_tl_c12) */ * from tl where (c1 0) and (c2 1000 or c255667);
hint强制使用键优先扫描 自动索引扫描更常见的是发生在exists 子句
select * from ti where exists(select 1 from tk where ti.c2tk.c2); 多路径扫描 常发生在多个查询条件时
此处使用hint 强制控制多路径扫描
select /* MULTI_INDEX (ti index_ti_c1,index_ti_c2) */ * from ti where c1 150000 and c2 in (58F6ADC849EB4A489BBBE679AF8CC3F1,3BDD7CE3C5504DA4A399A75B4ACFC026,B927DF1AF6E64EF4BA7310CF4E182236,,); 索引反转select c1 from ti order by c1 desc; select * from ti where rowid444