首页 > 其他分享 >索引创建规则及优化

索引创建规则及优化

时间:2024-06-21 15:44:00浏览次数:13  
标签:ename -- 创建 age 索引 emp 优化 select

示例: drop table if exists emp; create table emp (eid int  CLUSTER primary key identity(1,1),ename varchar(200),age int,hiredate date,sal int,deptno int); declare i int; begin for i in 1..50000 loop insert into emp (ename,age,hiredate,sal,deptno) select dbms_random.string('2',trunc(dbms_random.value(2,4))), trunc(dbms_random.value(1,100)),  ADD_DAYS(sysdate(),dbms_random.value(-10000,-10)),  trunc(dbms_random.value(1,10000)), trunc(dbms_random.value(1,6)) from dual; end loop; if  mod(i,5000)=0 then end if; end; commit; 选择性:基数(某个列不同值的数量)与总行数的比值再乘以100%就是某个列的选择性。一般选择性大于20%就可以考虑建索引了。 --根据下面可以查询ENAME字段的基数和选择性, select dnum 基数,tnum 总数,round(dnum/tnum*100,2) 选择性 from (select count(DISTINCT(ename)) dnum ,count(*) tnum from emp ) t;

-- 如果值为0,达梦整数的除法运算需要修改参数CALC_AS_DECIMAL为1,重启数据库生效 统计信息:主要是描述数据库中表和索引的大小数以及数据分布状况等的一类信息,优化器依赖统计信息来评估选择最佳的执行计划 --上面所示,ename选择性好,在该字段创建一个索引进行测试 create index idx_emp_name on emp(ename); -- 从EMP表中找出Ename为SKJ的数据  select * from emp where ename= 'SKJ';

查询该sql的执行计划 EXPLAIN select * from emp where ename='SKJ';

 --从上面可以看到,Ename 为SKJ的结果只有4条数据,而执行计划里面的结果集是2500

优化器依赖统计信息来评估选择率(符合条件的记录数与原总记录数的比例)。如果没有统计信息可用,则对于列名=<常量>的谓词,选择率固定为SEL_RATE_EQU,默认值为2.5%,其他谓词为SEL_RATE_SINGLE,默认值5% 收集统计信息 call DBMS_STATS.GATHER_TABLE_STATS('SYSDBA','EMP',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO'); 统计信息收集之后,查看执行计划

回表:先通过普通索引扫描出数据所在的行,再通过的rowid或聚集索引找出表中的数据,回表一般是单块读,回表次数太多会严重影响SQL性能  --查询ename 开头是A的年龄信息  select ename,age from emp where ename like 'A%' ;

执行计划如下 EXPLAIN select ename,AGE from emp where ENAME like 'A%';

覆盖索引:索引中包含了查询中的所有字段,是为了避免回表从而降低查询耗时的一种使用索引的方法。 --前面ename的选择性是26.21,而age的选择性是0.2,创建组合索引时将过滤条件好的放前面 --在emp表中建立ename,age组合索引 create index idx_ename_age on EMP(ename,age); --可以看到执行计划已经没了BLKUP2的操作符了,已经消除了回表  最左侧匹配原则:使用联合索引进行查询时,会优先使用最左边的列进行匹配,然后再依次向右匹配。遇到范围查询就会停止 select  ename,age from emp where ename like 'A%' and age=20 ; 如上所示,因为ename字段条件是like,后面的字段age就不会使用到创建的组合索引 索引下推:索引断裂走不下去后,不会立即回表,还会向下推一步再继续比较其它索引字段。 --通过添加hint采用索引下推之后,执行计划如下 select /*+ENABLE_INDEX_FILTER(1)*/ ename,age from emp where ename like 'A%' and age=20 ;

标签:ename,--,创建,age,索引,emp,优化,select
From: https://www.cnblogs.com/fangzpa/p/18260644

相关文章

  • redis自学(47)服务端优化
    持久化配置Redis的持久化虽然可以保证数据安全,但也会带来很多额外的开销,因此持久化请遵循下列建议:①用来做缓存的redis实例尽量不要开启持久化功能②建议关闭RDB持久化功能,使用AOF持久化(RDB的数据安全性一直是有问题的,两次RDB的时间比较长,又不能频繁的RDB,因为耗时久而且需......
  • C# 之 .net core -- 创建项目
    原文链接:https://www.cnblogs.com/hkzw/p/12001420.html一、新建一个Web的应用程序 二、选择项目的基本信息(.netcoer2.2 和带有试图控制器的程序)在这里创建的是MVC模式,也可以用其他的,比如空的、web应用程序。跟平常开的的那种表面上差别不大,总之需要什么选什么 ......
  • HUSKY:一个优化大语言模型多步推理的新代理框架
    推理被高度认可为生成人工智能的下一个前沿领域。通过推理,我们可以将任务分解为更小的子集并单独解决这些子集。例如以前的论文:思维链、思维树、思维骨架和反射,都是最近解决LLM推理能力的一些技术。此外推理还涉及一些外围功能,例如访问外部数据或工具。在最近的几年里,我们已经看到......
  • Python 学习 第三册 第12章 图的最优化问题
    ----用教授的方式学习。目录12.1图的最优化问题12.1.1最短路径:深度优先搜索和广度优先搜索12.1图的最优化问题我们下面研究另一种最优化问题。假设你有一个航空公司航线的价格列表,其中包括美国任意两个城市之间的航班价格。假设有3个城市A、B和C,从A出发经过B到达C的价格......
  • 金仓数据库全攻略:简化部署,优化管理的全流程指南
    金仓数据库人大金仓(KINGBASE)是一家拥有20多年数据库领域经验的公司,专注于数据库产品的研发和服务。公司曾参与多项国家级重大课题研究,如"863"计划、电子发展基金、信息安全专项等。其核心产品是金仓数据库管理系统KingbaseES,这是一个大型通用数据库,具有国际先进水平。金仓数据......
  • Mysql慢查询及优化(全网最详细!!!)
    一、定位慢SQL1.首先确认是否开启了慢查询2.设置慢查询的时间限制3.查询慢查询日志可定位具体的慢sql4.相关sql查询5.用Explain分析具体的sql语句6.用Explain字段介绍二、慢SQL优化1.不使用子查询2.读取适当的记录LIMITM,N3.分组统计可以禁止排序4.禁止不必要......
  • ThingsBoard实现告警规则创建并生成报警信息
    一、概述1.概念2.告警规则3.简单报警条件步骤1.打开设置配置​步骤2.单击警报规则​步骤3.单击警报条件​步骤4.单击过滤条件步骤5.选择数据键​步骤6.设置条件​步骤7.保存条件步骤8.应用更改4.测试告警 1、使用MQTT发送遥测属性 2、查看告警列表,已存......
  • Android面试题:App性能优化之电量优化和网络优化
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点电量优化Doze模式系统的行为进入Doze后看看App有没有奔溃就可以Standby待机模式针对某个应用处于上述模式,App会无法访问网络解决方案可以手动申请权限让用......
  • 轧机减速器优化设计与性能分析(论文)
    目录摘要………………………………………………………………………………ⅠABSTRACT………………………………………………………………………Ⅱ第一章、传动方案的拟定及说明1.1传动方案……………………………………………………………1第二章、电动机的选择2.1电......
  • ArcGIS创建环状面矢量
    1)在ArcMap10.8中,在目录列表中,选择创建的面矢量想要保存的文件夹右击>新建>Shapefile;2)设置矢量名称,选择要素类型为面;确定,确定;创建的新矢量文件将在左侧图层列表中出现。 3)编辑器>开始编辑>选中面矢量文件>继续,开始编辑;4)创建要素>选中面矢量文件>构造工具>......