【SQL】查找数据的方式 (二)

如果表查询中所有的列都包括在了索引中,就有可能使用FFS,当然也可以使用hint来选择FFS。下面看看使用不同方式访问索引的例子:

SQL> create index idx_un_tset_ownid_dataid on un_test (owner,data_object_id);
Index created.
Elapsed: 00:00:00.96
SQL> select owner ,data_object_id from un_test
  2  where data_object_id >5;
6891 rows selected.
Elapsed: 00:00:00.06
Execution Plan
----------------------------------------------------------
Plan hash value: 287826149
-------------------------------------------------------------------------------------------------
| Id  | Operation            | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                          |  6913 | 55304 |    32   (4)| 00:00:01 |
|*  1 |  INDEX FAST FULL SCAN| IDX_UN_TSET_OWNID_DATAID |  6913 | 55304 |    32   (4)| 00:00:01 |
------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("DATA_OBJECT_ID">5)
Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        602  consistent gets
        135  physical reads
          0  redo size
          ..........
          0  sorts (memory)
          0  sorts (disk)
       6891  rows processed

SQL> select owner ,data_object_id from un_test
  2   where data_object_id =5;
no rows selected
Elapsed: 00:00:00.00
Execution Plan
----------------------------------------------------------
Plan hash value: 1786681723
---------------------------------------------------------------------------------------------
| Id  | Operation        | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                          |     1 |     8 |    21   (0)| 00:00:01 |
|*  1 |  INDEX SKIP SCAN | IDX_UN_TSET_OWNID_DATAID |     1 |     8 |    21   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("DATA_OBJECT_ID"=5)
       filter("DATA_OBJECT_ID"=5)
Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
         15  consistent gets
          0  physical reads
           。。。。。。
          0  sorts (memory)
          0  sorts (disk)
          0  rows processed

SQL> select object_id from un_test where object_id = 5;
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 333614268
--------------------------------------------------------------------------------
| Id  | Operation         | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |            |     1 |     5 |     1   (0)| 00:00:01 |
|*  1 |  INDEX UNIQUE SCAN| I_TEST_UNI |     1 |     5 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
-------------------------------------------------
   1 - access("OBJECT_ID"=5)

Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
           。。。。。
          0  sorts (disk)
          1  rows processed
SQL> select /*+ index_ffs(a)*/ owner,data_object_id from un_test a
  2  where wner = 'SYS';
23021 rows selected.
Elapsed: 00:00:00.12
Execution Plan
----------------------------------------------------------
Plan hash value: 287826149
-------------------------------------------------------------------------------------------------
| Id  | Operation            | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                          |  2668 | 21344 |    32   (4)| 00:00:01 |
|*  1 |  INDEX FAST FULL SCAN| IDX_UN_TSET_OWNID_DATAID |  2668 | 21344 |    32   (4)| 00:00:01 |
-------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("OWNER"='SYS')
Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
       1674  consistent gets
          0  physical reads
          。。。。。。。
          0  sorts (memory)
          0  sorts (disk)
      23021  rows processed
----------------
SQL> SELECT /* INDEX(A)*/ OWNER,DATA_OBJECT_ID FROM UN_TEST A
  2  WHERE WNER ='SYS';

23021 rows selected.
Elapsed: 00:00:00.12
Execution Plan
----------------------------------------------------------
Plan hash value: 3998526102
---------------------------------------------------------------------------------------------
| Id  | Operation        | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                          |  2668 | 21344 |     8   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_UN_TSET_OWNID_DATAID |  2668 | 21344 |     8   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("OWNER"='SYS')
Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
       1586  consistent gets
          0  physical reads
          。。。。。
          0  sorts (disk)
      23021  rows processed
----------------------------
SQL> select /*+ index (a idx_un_test_ownid_dataid)*/ count(*) from un_test a
  2  where data_object_id = 5;
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1636324484
---------------------------------------------------------------------------------------------
| Id  | Operation        | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                          |     1 |     2 |    21   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE  |                          |     1 |     2 |            |          |
|*  2 |   INDEX SKIP SCAN| IDX_UN_TSET_OWNID_DATAID |     1 |     2 |    21   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("DATA_OBJECT_ID"=5)
       filter("DATA_OBJECT_ID"=5)
Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
         15  consistent gets
          0  physical reads
           。。。。。
          0  sorts (disk)
          1  rows processed

---位图索引。。
SQL> select /*+ index(a idx_type_bit)*/ * from un_test a
  2  where a.object_type ='TABLE';
2921 rows selected.
Elapsed: 00:00:00.05
Execution Plan
----------------------------------------------------------
Plan hash value: 4191918535
---------------------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |  1779 |   161K|   194   (0)| 00:00:03 |
|   1 |  TABLE ACCESS BY INDEX ROWID | UN_TEST      |  1779 |   161K|   194   (0)| 00:00:03 |
|   2 |   BITMAP CONVERSION TO ROWIDS|              |       |       |            |          |
|*  3 |    BITMAP INDEX SINGLE VALUE | IDX_TYPE_BIT |       |       |            |          |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("A"."OBJECT_TYPE"='TABLE')
Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        347  consistent gets
          1  physical reads
          0  sorts (memory)
          0  sorts (disk)
       2921  rows processed

时间: 2024-08-07 15:35:04

【SQL】查找数据的方式 (二)的相关文章

【SQL】查找数据的方式 (一)

SQL> set autot on   SQL> select rowid, object_id   2  from test   3  where rowid ='AAARVKAAEAAAAD8AAA'; ROWID               OBJECT_ID ------------------ ---------- AAARVKAAEAAAAD8AAA         28 Elapsed: 00:00:00.01 Execution Plan -------------------

android数据存储方式(二) Shared Preferences

android的数据存储有四种方式: 1.Shared Preferences 主要用于存储key-value对格式的 数据,是轻量级的存储机制,轻到只能存储基本数据类型. 2.Files 通过FileInputStream和 FileOutputStream对文件进行操作,由于在android中文件是一个应用程序私有的,所以其他应用程序无法读 写. 3.SQLite android提供的标准数据库,支持SQL语句.有关于这部分,可以见我的另一篇文 章:http://www.cnblogs.co

数据-C# sql 查找每个分库中某表某ID字段重复的记录

问题描述 C# sql 查找每个分库中某表某ID字段重复的记录 目前30个分库中,每个库目前至少有100万条记录,每个库同有一个数据表A,表结构相同.每个表的主键叫recordID,但是各个分库间会重复不唯一.需求一个思路.忽略数据表设计问题,目前就是做出这个工具而已,表设计问题不管. 目前我是利用Sorteddiction的contains方法判断重复,但是会出现内存溢出的问题.OutOfMemory 解决方案 建临时表,先把所有表的recordID集中起来,然后再判断重复.

SQL Server数据库多种方式查找重复记录

原文地址:http://kb.cnblogs.com/page/94862/ 摘要:SQL Server是一个关系数据库管理系统,SQL Server数据库的应用是很多的,SQL Server数据库赢得了广大用户的青睐,本文将主要为大家介绍关于SQL Server数据库中查找重复记录的方法. SQL Server数据库多种方式查找重复记录: 示例:表stuinfo,有三个字段recno(自增),stuid,stuname 建该表的Sql语句如下: CREATE TABLE [StuInfo] (

memcached实战系列(七)理解Memcached的数据过期方式、新建过程、查找过程

1.1.1. 新建Item分配内存过程 1:快速定位slab classid,先计算Item长度 key键长+flag+suffix(16字节)+value值长+结构大小(32字节),如90byte 如果>1MB,无法存储丢弃 取最小冗余的slab class 如:有48,96,120,存90会选择96   1.1.2. 按顺序寻找可用chunk顺序 (1)slot:检查slab回收空间slot里是否有剩余chunk delete:delete时标记到slot exptime:get时检查的过期

为什么有时 Oracle 数据库不用索引来查找数据

oracle|数据|数据库|索引 当你运用 SQL 语言,向数据库发布一条查询语句时, ORACLE 将伴随产生一个"执行计划",也就是该语句将通过何种数据搜索方案执行,是通过全表扫描.还是通过索引搜寻等其它方式.搜索方案的选用与 ORACLE 的优化器息息相关. SQL 语句的执行步骤. 1 语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2 语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3 视图转换 将涉及视图的查询语句转换为相应的对基表

Sql表数据操作

数据 表数据操作包括数据的插入.修改和删除.一.插入数据 在向表中添加数据时应该注意两点:第一是用户权限,只有sysadmin角包成员.数据库和数据库对 象所有者及其授权用户才有权限向表中添加数据:第二是数据格式,对于不同的数据类型,插入数据的 格式也不一样,应严格遵守它们各自的格式要求. Transact-SQL语言中用INSERT语句向表或视图中插入新的数据行.INSERT语句的语法格式为: INSERT [INTO] table_source {[column_list] VALUES (

为什么Oracle有时会用索引来查找数据?

当你运用SQL语言,向数据库发布一条查询语句时,ORACLE将伴随产生一个"执行计划",也就是该语句将通过何种数据搜索方案执行,是通过全表扫描.还是通过索引搜寻等其它方式.搜索方案的选用与ORACLE的优化器息息相关. SQL语句的执行步骤 一条SQL语句的处理过程要经过以下几个步骤. 1 语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2 语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3 视图转换 将涉及视图的查询语句转换为相应的对基表查询

Android开发笔记之: 数据存储方式详解_Android

无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络