下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

/**********Oracle中的sql性能优化****************/ 村长 1280025885

1.索引方面

1.1 应该尽量避免在where子句中对字段null进行判断,否则否则将导致引擎放弃使用索引而进行全表扫描

例子:如 select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

1.2 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

1.3 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

可以这样查询:(使用union all来查询)

select id from t where num=10

union all

select id from t where num=20

1.4 in 和 not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

1.5 下面的查询也将导致全表扫描: 对于大量模糊查询使用lucene等查询

select id from t where name like '%abc%'

若要提高效率,可以考虑全文检索。

1.6 如果在 where 子句中使用参数,也会导致全表扫描。因为sql只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

select id from t where [email protected]

可以改为强制查询使用索引:

select id from t with(index(索引名)) where [email protected]

1.7 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where num/2=100

应改为:

select id from t where num=100*2

1.8 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where substring(name,1,3)='abc'--name以abc开头的id

select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id

应改为:

select id from t where name like 'abc%'

select id from t where createdate>='2005-11-30' and createdate

1.9 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

1.10 在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致

1.11 不要写一些没有意义的查询,如需要生成一个空表结构:

select col1,col2 into #t from t where 1=0

这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:

create table #t(...)

1.12 很多时候用 exists 代替 in 是一个好的选择:

select num from a where num in(select num from b)

用下面的语句替换:

select num from a where exists(select 1 from b where num=a.num)\

1.13 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

1.14 并不是所有索引对查询都有效,sql是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。据估计为20%

1.15 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

2.表中的字段设计

2.1 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

2.2 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

2.3 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

2.4 尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)

2.5 避免频繁创建和删除临时表,以减少系统表资源的消耗。

2.6 临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

2.7 在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

3.表结构拆分与优化

3.1

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

总结

以上是编程之家为你收集整理的oracle数据库全部内容,希望文章能够帮你解决oracle数据库所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

oracle数据库之家,oracle数据库相关推荐

  1. 如何向oracle中导入数据,Oracle导入导出数据库的语法_Oracle_Oracle语法_Oracle数据库_课课家...

    在Oracle当中如何才能对数据库的语法进行导入导出呢?其实啊,这有不止一种方法呢.事实上啊,在Oracle当中,不仅可以在Oracle编辑器中用图形化的方式导入导出文理文件的数据方式,而且还可以采用 ...

  2. oracle简易版创建数据库,浅析新建Oracle数据库的三种方法

    1.通过运行Oracle Database Configuration Assistant 创建.配置.或删除数据库(也可在命令行下输入dbca): 2.用命令行的方式建立数据库 3.通过运行自定义的 ...

  3. mysql换成oracle_mysql数据库迁移至Oracle数据库

    本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下 1.使用工具: (1) Navicat Premium (2) PL/SQL Developer 11.0 (3) Oracl ...

  4. SQL Server与Oracle、DB2三种数据库比较

    开发数据库应用,选择一个好的数据库是非常重要的.本文从一些方面比较了SQL Server与Oracle.DB2三种数据库,为你选择数据库提供一些参考. 开放性 SQL Server 只能在Window ...

  5. 彻底删除oracle数据,彻底删除Oracle数据库的方法

    1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 2.打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS ...

  6. 卸载服务器oracle数据库,完美卸载Oracle数据库

    最近因为要写一个项目的接口,需要远程的连接oracle数据库,刚开始的时候因为我本地只装了MySQL,所以用就连接了本地MySQL,接口大体完事有在tomcat中测试了下,也能跑通,但是后来又要改数据 ...

  7. Oracle图书馆借阅管理数据库,图书馆管理系统Oracle数据库平台升级研究

    随着现在计算机网络的发展,数字化图书凭着其发行的速度快.借阅的方便,并且没有时间和空间的限制逐渐成为未来图书馆发展中的一种趋势.我图书馆使用了汇文文献信息服务系统,该系统是江苏省教委资助,江苏省高校合 ...

  8. 1. oracle学习入门系列之一 数据库发展与历史

    oracle学习入门系列之一 数据库发展与历史 这个oracle学习入门系列是根据本人工作中的一些笔记.项目进行回忆.整理.一方面是自己知识积累,便于技能提升:另一方面是和小伙伴们共进退互通有无,做一 ...

  9. zabbix如何监控oracle,使用zabbix监控oracle数据库的方法详解

    一.概述 zabbix是一款非常强大,同时也是应用最为广泛的开源监控软件,本文将给大家介绍如何利用zabbix+python监控oracle数据库. 二.环境介绍 以下是我安装的环境,实际部署时并不需 ...

最新文章

  1. 中国队蝉联国际奥数冠军,6名选手获5金1银,3人保送北大、3人保送清华
  2. 二分图的匹配问题以及求解算法
  3. 手机内置摄像头接线图解_苹果手机,二手价格如何?
  4. 高斯混合模型(Gaussian Mixture Model)
  5. Kotlin 的 Array 转 List
  6. 32岁妈妈适合转行做软件测试吗,32+大龄妈妈,AMH偏低,可丽蓝助力好孕一次就中...
  7. 【BZOJ3831】Little Bird,单调队列优化DP
  8. 部署 Job (第二部分)
  9. Vscode 在 Linux 上配置远程开发
  10. Android 四大组件学习之ContentProvider四
  11. 【转】常见问题及应用技巧---------[BIOS篇]
  12. 嵌入式、单片机和PLC哪个前景好一些?
  13. 18. Zigbee应用程序框架开发指南 - 应用框架V6
  14. 如何快速下载720云高清全景图片
  15. 橙瓜码字多端同步、十份云储存本地实时备份,最放心的码字软件
  16. C++模拟手机调查问卷
  17. css3两种hover动画
  18. 从户外广告“全面轰炸”看凡客的品牌营销理念
  19. selenium 实战模拟登陆
  20. Unity LoadImage LoadRawTextureData 方法加载 Bitmap

热门文章

  1. 解决Spring 异常:defined in BeanDefinition defined in class path resource [XXX], could not be registered.
  2. 无root权限在A4000服务器上配置cuda和pytorch和注意算力匹配
  3. 辽宁中专计算机学校名字,辽宁省中专学校名单
  4. 维修计算机起名字,电脑维修店起名 电脑维修店名字大全
  5. 炸裂!OpenStack“女王”驾临!
  6. Dockerfile镜像构建
  7. 又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...
  8. python实现冒险者游戏(文字版,无界面)
  9. 取石子游戏(c++)
  10. 一位局长的“骂人情结”