oracle 大数据常见优化 &分页查询

这篇具有很好参考价值的文章主要介绍了oracle 大数据常见优化 &分页查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考某微信社区博主,此文为温故知新;原参考博主账号与链接已丢失
oracle大数据量分页查询,oracle,大数据,数据库

分页

1.limit
语句样式:select * from table limit m,n
适用场景:适用于数据量较少的情况(元组、百/千)
缺点:全表扫描,速度劣势,有的数据库结果集返回不稳定。limit限制是从结果集的M位置处取出N条输出,其余抛弃。

2.基于索引再排序
语句样式:select * from table where id_pk > (pageNum*10) order by id_pk ace limit M
适用场景:适用于数据量多的情况(上万),最好order by的列对象是主键或唯一,使得结果集是稳定的

3.基于索引使用prepare(第一个问号表示pageNum,第二个?表示每页元组数)
语句样式:PREPARE stmt_name FROM SELECT * FROM 表名称 WHERE id_pk >(? *? ) ORDER BY id_pk ASC LIMIT M
适用场景:大数据量
原因:索引扫描,速度快,prepare更快

4.利用mysql支持order操作可以利用索引快速定位部分元组,避免全表扫描
eg:读取第1000到1019行元组
select * from table where pk>=1000 order by pk ASC limit 0,20

oracle 大数据常见优化

1.避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引

2.尽量避免在where子句对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描
eg:
num is null 更为 num = 0(设置默认值)
添加、修改默认值:alter table table_name modify column_name default 具体内容;
删除默认值:alter table table_name modify column_name default null;

替换is null 的方法

1.NVL select NVL(product_code,-1) from table.ms_goods --若product_code为空,则返回-1, NVL(eExpression1, eExpression2) 输出结果: 如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1的计算结果不是 null 值,则返回 eExpression1。
eExpression1 和 eExpression2可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回NULL.。

2.NULLIF() 如果两个指定的表达式相等,则返回空值。 语法NULLIF ( expression1 , expression2 )

3.COALESCE() Oracle COALESCE函数语法为COALESCE(表达式1,表达式2,…,表达式n),n>=2,此表达式的功能为返回第一个不为空的表达式,如果都为空则返回空值。(所有表达式必须为同一类型或者能转换成同一类型。)

4.DECODE() decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下:
IF 条件=值1
THEN RETURN(返回值1)
ELSIF
条件=值2
THEN
RETURN(返回值2)

ELSIF
条件=值n
THEN
RETURN(返回值n)
ELSE RETURN(缺省值)
END IF

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

4.尽量避免在where子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描 可用 union all(全连接)替换

eg:
select  *  from table where num = 10 or num =32
替换为
select  * from table where num=10
nuion all
select * from table where num=20

5.慎用in 和not in,否则会导致全表扫描;like也将导致全表查询,instir替代
对于连续的数值,使用between

6.如果在where子句使用参数,也会导致全表扫描

select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num

7.应避免在where子句中对字段进行表达式操作,会全表扫描

select id from t where num/2=100
应改为:
select id from t where num=100*2

8.避免在where子句中对字段进行函数操作,会使引擎放弃使用索引而进行全表扫描
=to_date 也是函数

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

10.在使用索引字段作为条件,如果索引为复合索引(组合索引),那么必须使用该索引中的第一个字段作为条件时才能保证系统使用该索引,否则索引将不会使用;索引顺序尽量与表中字段顺序一致;
索引不是越多越好,一个表的索引最好不要超过6个
窄索引:索引列为1—2列的索引
宽索引:索引超过2列的索引

11.用exists 代替in

12.尽可能避免更新(簇表)clustered索引数据列,因为clustered索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会消耗相当大的资源

13.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符
14.尽可能使用varchar/nvarchar 代替char/nchar,因为首先变长字段存储空间小,可以节省存储空间,其次较小字段内搜索效率更高

char的长度是固定的,varchar的长度是可以变化的() varchar:按字节存储数据
varchar(6),最多能存储6个字节的数据,比如“哈哈哈” nvarchar:按字符存储数据
nvarchar(6),最多能存储6个字符/中文数据,如“哈哈哈哈哈哈”;nvarchar(m)最大存储的实际长度=n*m(n根据编码方式而定),如果nvarchar存储的是英文字符,也是根据编码方式存储n的字节长度。用nvarchar存储英文字符,会浪费一半以上的存储空间

15.尽量避免SELECT * FROM,用具体字段代替*;尽量使用表变量代替临时表;避免频繁创建和删除临时表,以减少系统表资源的消耗

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

17.尽量避免使用游标(cursor),因为游标的效率较差,如果游标操纵的数据超过1万行,那么就应该考虑改写

18.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送DONE_IN_PROC

SET NOCOUNT ON:阻止在结果集中返回显示受T-SQL语句影响的行计数信息。 SET ONCOUNT ON 不返回计数 SET
NOCOUNT OFF 返回计数 当SET NOCOUNT ON时候,将不向客户端发送存储过程每个语句的DONE_IN_proc消息,如果存储过程中包含一些并不返回实际数据的语句,网络通信流量便会大量减少,可以显著提高应用程序性能;

T-sql
T-SQL即 Transact-SQL,是标准SQL语言的扩展,SQL Server的核心,SQL的的基础上添加了变量,运算符,函数和流程控制等新内容,

T-SQL 语言的组成
数据定义语言(DDL Data Definition Language):SQL让用户定义存储数据的结构和组织,以及数据项之间的关系
数据检索语言:SQL允许用户或应用程序从数据库中检索存储的数据并使用它
数据操纵语言(DML ,Data Manipulation Language):SQL 允许用户或应用程序通过添加新数据、删除旧数据和修改以前存储的数据对数据库进行更新
数据控制语言(DCL,Data Control Language):可以使用SQL来限制用户检索、添加和修改数据的能力,保护存储的数据不被未授权的用户所访问
    数据共享:可以使用SQL来协调多个并发用户共享数据,确保他们不会相互干扰
    数据完整性:SQL在数据库中定义完整性约束条件,使它不会由不一致的更新或系统失败而遭到破坏

19.尽量避免大事务操作,提高系统并发能力;尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理文章来源地址https://www.toymoban.com/news/detail-751659.html

到了这里,关于oracle 大数据常见优化 &分页查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • oracle 12 查询数据库锁

    在Oracle 12c中,查询数据库锁信息可以通过以下视图进行: v$locked_object :这个视图显示了当前被锁定的对象(如表、行等)的信息。 v s e s s i o n ∗ ∗ 和 ∗ ∗ v session** 和 **v sess i o n ∗ ∗ 和 ∗ ∗ v lock :这两个视图提供了关于会话和锁的详细信息,可以结合使用以获取更

    2024年01月25日
    浏览(47)
  • 【数据库】日常使用PL/SQL 登录ORACLE 数据库查询数据

    一、PL/SQL 登录方式 username: ##访问数据库的账号 password: ##访问数据库的密码 Databse: ##数据库IP地址/实例名 数据库集群心跳地址/实例名 Connect as : ##Normal,如果使用sysdba账户登录选择SYSDBA 二、PL/SQL使用SQL语句查询 点击上方导航栏,New,选择SQL Window,即可再次输入要查询的

    2024年02月19日
    浏览(68)
  • 查询数据库空间(mysql和oracle)

    1.查看数据库表空间文件: 2.查看所有表空间的总容量: 3.查看数据库表空间使用率 4.1.查看表空间总大小、使用率、剩余空间 4.2.查看表空间使用率(包含temp临时表空间) 5.查看具体表的占用空间大小 1.更改表空间的dbf数据文件分配空间大小 2. 为表空间新增一个数据文件(表空间

    2024年02月05日
    浏览(45)
  • Oracle 数据库表性能优化

    最近在一次工作过程中,遇到了oralce 表性能慢的问题。一个历史表,一个月将近1000多万的数据量,想查询这个表的数据,只使用了一个简单的语句,却一个多小时都查不出来。于是决定对Oracle 的这张表的性能进行一下优化。本人不是一个专门搞数据库这块的dba,所以只能粗

    2024年02月03日
    浏览(53)
  • (Oracle)SQL优化技巧(一):分页查询

    目录 分页查询框架 分页查询注意事项  有序/无序分页 事务带来的影响 分页查询与索引 排序字段索引实验 组合索引实验 利用ROWNUM进行分页查询的方法在各版本都是适用的,11g,12c,19c都可以使用该方法哦。在分享分页查询方法之前,需要先聊下ROWNUM,这玩意儿要是聊不清楚,

    2024年04月11日
    浏览(47)
  • 数据库常见的查询

    目录 一、查询的完全限定写法 二、条件查询 三、模糊查询 四、范围查询 1):between and 2):in 3):is null或者、is not null和null和!=null 五、case when 1)方式1 2)方式2 六、排序查询 七、分组查询 1)用到分组函数 2)分组查询语法 3)分组查询特点 4)例子

    2024年02月05日
    浏览(35)
  • Mysql 数据库DQL 数据查询语言 SELECT 基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询——包含DQL所有查询语句。吐血分享。

    DQL:数据查询语言; 用来对表内的数据进行查找 。Database Query Language SQL语句分为:基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询。  可以发现name字段就只剩下一个张三了;   条件: 条件查询—比较运算符 比较运算符 功能 大于 = 大于等于 小于 = 小于等

    2024年01月19日
    浏览(53)
  • 【JaveWeb教程】(20) MySQL数据库开发之 基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询 详细代码示例讲解

    在上次学习的内容中,我们讲解了: 使用DDL语句来操作数据库以及表结构(数据库设计) 使用DML语句来完成数据库中数据的增、删、改操作(数据库操作) 我们今天还是继续学习数据库操作方面的内容:查询(DQL语句)。 查询操作我们分为两部分学习: DQL语句-单表操作

    2024年02月02日
    浏览(81)
  • 查询Oracle和MySQL数据库中当前所有连接信息

    查询Oracle当前所有连接信息: 查询MySQL当前所有连接信息: 在这两个查询中,我为每个字段添加了中文别名,以提高查询结果的可读性

    2024年02月12日
    浏览(69)
  • Oracle数据库中,授权某用户可以查询其他用户的表

    在Oracle数据库中,授权一个用户可以查看其他所有用户的表,需要执行以下步骤: 使用数据库管理员账号连接到Oracle数据库。 通过 GRANT 命令给用户授予必要的权限。例如,如果要授权用户 user1 可以查看所有其他用户的表,可以执行以下命令: 这条命令将授予 user1  SELECT

    2024年02月08日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包