要写出高效的SQL,那么必须必须得清楚SQL执行路径,介绍如何提高SQL性能的文章很多,这里不再赘述,本人来谈谈如何从 减少SQL回表次数 来提高查询性能,因为回表将导致扫描更多的数据块. 我们大家都知道,数据库表中数据存储都是以块为单位,称为数据块:表中每行数据都有唯一的地址标志ROWID. 举个例子: select a from test_db where b=5 A.假设b上没有索引 1.那么该条SQL将进行表扫描,扫描所有该表的数据块 2.从数据块中找到记录,并且进行过滤 可想而知,没有…
检测SQL Server表占用空间大小SQL,要先选择需要查询的数据库,然后点击执行下面脚本. ),ROWS ),reserved ) ,Data ) ,index_size ) ,Unused ) ) GO INSERT #T EXEC SP_MSFOREACHTABLE 'EXEC sp_spaceused "?"' SELECT * FROM #T ORDER BY CONVERT(INT,REPLACE(DATA,'KB','')) DESC drop table #T…
执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就可能要几十表了.这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了. 当你向ORACLE提交一个SQL语句,ORACL…
工:闪回表实验 1.结构测试表flb_test,数据不小于10000行: TEST_USER1@PROD>create table flb_test(id number,dd date); Table created. TEST_USER1@PROD>begin   2  for i in 1..10000   3  loop   4  insert into flb_test values (i,sysdate+i);   5  end loop;   6  end;   7  / PL/S…
Oracle闪回技术 场景:测试环境数据库的表数据被误删除. 解决思路:使用闪回表技术 原理 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成). Oracle中一个逻辑结构--撤销段(Undo segment).因为大部分闪回技术都需要依赖撤销段中的撤销数据.撤销数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段.(事务回滚也会用到撤销段…
--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间内的各个版本 --- 使用闪回事务查询查看事务处理历史记录或行 会还原表及其关联对象(如索引.约束条件.触发器等)中的数据. 所谓闪回表,就是将表里的数据回退到历史的某个时间点,比如回退到用户误删除数据之前的时间点,从而将误删除的数据恢复回来,在这个操作过程中,数据库仍然可用而且不需要额外的空间.…
首先看看MSYQL逻辑框架:图片来自高性能mysql 如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存中检索结果,而不是再次分析和执行相同的查询.这样就能大大提高查询性能. 打开查询缓存,要通过几个步骤来设置: 虽然你设置mysql允许查询缓存,但是如果你设置的查询缓存大小为了0,这和没有允许没什么区别. 所以必须是几个步骤的设置才能真正打开查询缓存这个功能. 下面演示最常用的设置查询缓存 一. query_cache_type 使用查询缓存的方式 一般,我…
因为最近涉及到了一些数据库的归档,备份等工作,所以一部分的重心放在了数据库上,毕竟之前对数据库的了解也只停留在了一般的建表,查询,最多最多再写一写触发器之类的东西. 通常都是自己瞎搞搞,也就懂一点皮毛,主要作用就是给后端提供数据,所以这一次触碰到了企业级数据库的一些维护操作,需要的知识还是很多. 首先就是在查看数据库性能的时候,会涉及到对系统表的一些查看和读取,所以借此机会也整理一下. DBA_TABLES 意为DBA拥有的或可以访问的所有的关系表: ALL_TABLES意为某一用户拥有的或可以…
#描述:当执行如下SQL select * From XXX for Updata 发现表“XXX”被锁定 #只需要执行如下SQL 查看锁定该表的用户 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid; #效果图如下…
原文链接:http://blog.itpub.net/9399028/viewspace-678358/ 对于SQL的执行计划,一般尽量避免TABLE ACCESS FULL的出现,那怎样去定位,系统里面哪些SQL脚本存在TABLE ACCESS FULL行为,对于9i及以后版本,使用以下语句即可 select *   from v$sql_plan v  where v.operation = 'TABLE ACCESS'    and v.OPTIONS = 'FULL'    and v.…