添加索引后SQL消耗量在执行计划中的变化

不同索引的执行效率也是不一样的,下面比较三条SQL语句在正常查询与建立普通索引与位图索引后的CPU消耗量的变化,目的为了是加强对索引的理解与运用

实验步骤:

1、创建有特点的大数据表。
为了保证索引产生前后,查询效果的正确比对,应建立一个存在大量数据的测试表。这个测试表的数据来源于SYS模式下的all_objects视图,其中包括本数据库实例中的全部对象的基本描述,具体包括对象的所有者、对象名称、创建日期等信息。
创建测试表的具体过程:

创建大数据表,sys用户下的all_objects表就比较适合做查询用,把该表创建在scott用户下,可以先确定scott用户是否是解锁的

SQL>  CREATE TABLE scott.DemoTable as

SQL>  SELECT * FROM all_objects

 SQL>  WHERE owner IN (‘SYS‘,‘PUBLIC‘,‘SCOTT‘);

这里需要注意的是如果where后面的条件不成立的话,只会复制表结构,可以另外添加一下数据

SQL> insert into scott.demotable select * from sys.all_objects;

85029 rows created.

2.查询创建好的demotable的基本情况,连接scott用户

Desc scott.demotable

SQL> insert into scott.demotable select * from sys.all_objects;

SQL> select count(distinct owner),

2  count(distinct object_type),

3  count(distinct object_name)

4  from demotable;

3、分析表,开启追踪   这里的意思是打开执行计划,执行计划的查看方式有很多种。
analyze table demoTable compute statistics;
set autotrace trace explain  --开启追踪
注意:关闭追踪的方法为  set autotrace off;

开启追踪

SQL> analyze table demotable compute statistics;

Table analyzed.

SQL> set autotrace trace explain;

查看EMP的信息,

SQL> select * from demotable where object_name = ‘EMP‘;

SQL> select * from demotable where owner=‘SCOTT‘;

Scott用户cpu在342,所占279K

SQL> SELECT count(*) FROM demoTable where owner =‘SCOTT‘;

基于owner字段做实验建立建立索引

SQL> CREATE INDEX idx_owner ON demoTable(owner);

Index created.

SQL> SELECT * FROM demoTable where object_name = ‘EMP‘;

SQL> SELECT * FROM demoTable where owner =‘SCOTT‘;

SELECT count(*) FROM demoTable where owner =‘SCOTT‘;

4、创建位图索引,查看位图索引与普通索引,或者不建立索引带来的变化

--删除原有owner索引
    DROP INDEX idx_owner;

SQL> CREATE BITMAP INDEX idx_owner_bitmap ON demoTable(owner);

Index created.

SQL> SELECT * FROM demoTable where object_name = ‘EMP‘;

SQL> SELECT * FROM demoTable where owner =‘SCOTT‘;

SELECT count(*) FROM demoTable where owner =‘SCOTT‘;

原文地址:https://www.cnblogs.com/houzhiheng/p/12411089.html

时间: 2024-10-08 14:50:20

添加索引后SQL消耗量在执行计划中的变化的相关文章

执行计划中各字段各模块描述

在SQL语句的执行计划中,包含很多字段项和很多模块,其不同字段代表了不同的含义且在不同的情形下某些字段.模块显示或不显示,下 面的描述给出了执行计划中各字段的含义以及各模块的描述. 有关执行计划中各字段模块的描述请参考: 执行计划中各字段各模块描述        有关由SQL语句来获取执行计划请参考:     使用 EXPLAIN PLAN 获取SQL语句执行计划        有关使用autotrace来获取执行计划请参考:启用 AUTOTRACE 功能        有关display_cu

浅析SQL SERVER执行计划中的各类怪相

在查看执行计划或调优过程中,执行计划里面有些现象总会让人有些疑惑不解: 1:为什么同一条SQL语句有时候会走索引查找,有时候SQL脚本又不走索引查找,反而走全表扫描? 2:同一条SQL语句,查询条件的取值不同,它的执行计划会一致吗? 3: 同一条SQL语句,其执行计划会变化,为什么 4: 在查询条件的某个或几个字段上创建了索引,执行计划就一定会走该索引吗? 5:同时存在几个索引,SQL语句会走那个索引? ..............................................

MySQL---正确使用索引、limit分页、执行计划、慢日志查询

正确使用索引 数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效.即使建立索引,索引也不会生效: 1 - like '%xx' 2 select * from tb1 where name like '%cn'; 3 - 使用函数 4 select * from tb1 where reverse(name) = 'wupeiqi'; 5 - or 6 select * from tb1 where nid = 1 or e

【MS SQL】通过执行计划来分析SQL性能

如何知道一句SQL语句的执行效率呢,只知道下面3种: 1.通过SQL语句执行时磁盘的活动量(IO)信息来分析:SET STATISTICS IO ON (开启) / SET STATISTICS IO OFF (关闭) 2.通过SQL语句执行时语法分析.编译以及执行所消耗的时间:SET STATISTICS TIME ON (开启) / SET STATISTICS TIME OFF (关闭) 3.通过执行计划查看:Ctrl + L -------------------------------

如何通过outline为SQL语句指定执行计划

创建测试表 以用户jyu连接,创建测试表 SQL> conn jyu/jyu; Connected. SQL> create table t (id number, name varchar2(100)); Table created. SQL> insert into t select rownum,object_name from dba_objects; 47391 rows created. SQL> commit; Commit complete. 创建索引 SQL>

SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例

原文:SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例 开发人员遇到一个及其诡异的的SQL性能问题,这段完整SQL语句如下所示: declare @UserId             INT declare @PSANo              VARCHAR(200) declare @ShipMode           VARCHAR(10) declare @CY_FLAG            VARCHAR(1) declare @PO            

也谈SQL Server 2008 处理隐式数据类型转换在执行计划中的增强

在 SQL Server 查询中,不经意思的隐匿数据类型转换可能导致极大的查询性能问题,比如一个看起来没有任何问题简单的条件:WHERE c = N'x' ,如果 c 的数据类型是 varchar,并且表中包含大量的数据,这个查询可能导致极大的性能开销,因为这个操作会导致列 c 的数据类型转换为 nvarchar与常量值匹配,在 SQL Server 2008 及之后的版本中,这种操作做了增强,一定程度上降低了性能开销,参考SQL Server 2008 处理隐式数据类型转换在执行计划中的增强

了解Sql Server的执行计划

前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句.但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性能问题,这才是我们的最终目的,那么如何使用执行计划呢?我准备从以下几点来总结. 如何启动执行计划 执行计划结果要看什么 Sql Server的五种查找方式 查看更具体的执行过程 如何启动执行计划 运行一条sql,并且在工具栏中选中'Include Actual Execution Plan'按钮,此

SQL Server 执行计划中的扫描方式举例说明

原文地址:http://www.cnblogs.com/zihunqingxin/p/3201155.html 1.执行计划使用方式 选中需要执行的语句,点击Ctrl+L执行 2.示例student表,id,name,addressid上建立聚集索引Name建索引address无索引 3.区别1. [Table Scan]:遍历整个表,查找所有匹配的记录行.这个操作将会一行一行的检查,当然,效率也是最差的.以无索引字段为条件,按存放顺序一个个查,where address='123' 2. [I