Oracle 建立索引及SQL优化

一、概述 数据库索引有单列索引和复合索引之说,如果某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引。数据库索引主要进行提高访问速度。 二、建设原则 建设原则总结:大表Where列的Order by排序,考虑SQL性能优化的索引创建。 1、索引应该经常建在Where子句经常用到的列上。如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的5%,则应该考虑。 2、对于两表连接的字段,应该建立索引。如果经常在某表的一个字段进行Order By则也经过进行索引。 3、不应该在小表上建设索引。 三、优缺点 索引主要进行提高数据的查询速度。 当进行DML(Data Manipulation Language:即INSERT、DELETE、UPDATE)时,会更新索引。因此索引越多,则DML越慢,其需要维护索引。 因此在创建索引及DML需要权衡。创建索引: 单一索引:Create Index <Index-Name> On…

Continue Reading →

ORA-01219与ORA-01157

一、ORA-01219:数据库未打开: 仅允许在固定表/视图中查询 1.PLSQL连接数据库:SQL> conn sys/orcl as sysdba 2.查看你的数据库日志信息:SQL> select * from v$log; 3.关闭例程,挂在了数据库 :SQL> shutdown immediate; 4.启动数据库,并装载数据库: SQL> startup 5.修改数据库打开方式:SQL>…

Continue Reading →

Oracle子查询

子查询可以返回单行结果,可以返回多行结果,也可以不返回结果 1.如果子查询未返回任何行,则主查询也不会返回任何结果 (空值)select * from emp where sal > (select sal from emp where empno = 8888); 2.如果子查询返回单行结果,则为单行子查询,可以在主查询中对其使用相应的单行 记录比较运算符 (正常)select *…

Continue Reading →

Oracle中group by后带 rollup

一、如何理解group by 后带 rollup 子句所产生的效果 group by 后带 rollup 子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。因此要搞懂group by 后带 rollup 子句的用法主要是搞懂它是如何按一定的规则产生多种分组的。另group by 后带 rollup 子句所返回的结果集,可以理解为各个分组所产生的结果集的并集且没有去掉重复数据。下面举例说明: 1、 对比没有带rollup 的goup by 例:Group by A ,B 产生的分组种数:1种; 即group by A,B 返回结果集:也就是这一种分组的结果集。 2、 带rollup 但 group by…

Continue Reading →

Oracle的NUMBER数据类型

一、NUMBER (precision, scale)  1、precision表示数字中的有效位;如果没有指定precision的话,Oracle将使用38作为精度。 2、如果scale大于零,表示数字精确到小数点右边的位数;scale默认设置为0;如果scale小于零,Oracle将把该数字取舍到小数点左边的指定位数。 3、Precision的取值范围为【1—38】;Scale的取值范围为【-84—127】。 4、NUMBER整数部分允许的长度为(precision- scale),无论scale是正数还是负数。 5、如果precision小于scale,表示存储的是没有整数的小数。 6、Precision表示有效位数,有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数;scale表示精确到多少位,指精确到小数点左边或右边多少位(+-决定)。 二、举例 实际值 数据类型 存储值 1234567.89 Number 1234567.89 1234567.89 Number(8) 1234567 1234567.89 Number(6)…

Continue Reading →

Oracle同网段分实例用户共享表

一、同实例 进行大型系统开发时,往往会涉及到多个子系统的开发。为了方便开发一般数据库都会存在同一个数据库实例中,方便数据共享。这种数据共享的方式在Oracle中叫”同义词/synonyms”。 1、PL/SQL中的synonyms中右键新建 2、在弹出synonyms窗口中填写相关信息 3、创建成功,可以在本用户下直接查询其他用户表 select * from “同义词表名” 4、也可用SQL语句进行创建(便捷) create or replace synonym TABLENAME  for USER.TABLENAME; 注意:同示例下也可不必建议同义词,直接使用USER.TABLENAME进行访问。 二、不同实例 当数据库不存在同一实例下,但存在同一个局域网中,可以使用“dblink”进行关联查询,注意:建立dblink时无法查询clob字段。 1、先确定用户有创建 dblink…

Continue Reading →

数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的

一、原因分析 登录oracle数据库时我们会遇到这样的提示信息:“数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的”。这是由于数据库服务端和客户端的字符集不一致所造成的,服务端字符集和客户端字符集相同才能正确解析出数据库里的内容。它们俩就相当于一个编码,一个解码,必须相同才能解码正确。 二、解决方案 1、打开注册表,‘开始’-‘运行’ 输入‘regedit’-确定 2、找到HKEY_LOCAL_MACHINE\SOFTWARE 3、找到\Wow6432Node 4、找到\Oracle\KEY_OraClient11g_home1 5、找到NLS_LANG键并修改NLS_LANG 6、SIMPLIFIED CHINESE_CHINA.ZHS16GBK 改为 SIMPLIFIED CHINESE_CHINA.AL32UTF8 参考文章:https://www.cnblogs.com/areyouready/p/7747163.html

Continue Reading →