如何查找Oracle中存在全表扫描的SQL语句

如何查找Oracle中存在全表扫描的SQL语句,第1张

1. 对返回的行无任何限定条件,即没有where 子句

2. 未对数据表与任何索引主列相对应的行限定条件

例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用这个索引,因为State不是索引的主列。

3. 对索引的主列有限定条件,但是在条件表达式里使用以下表达式则会使索引失效,造成全表扫描:

(1)where子句中对字段进行函数、表达式 *** 作,这将导致引擎放弃使用索引而进行全表扫描,

Demo:

where upper(city)='TokYo' 或 City || 'X' like 'TOKYO%',

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

select from emp where to_char(hire_date,'yyyymmdd')='20080411' (不使用)

select from emp where hire_date = to_char('20080411','yyyymmdd') (使用)

(2)查询字段is null时索引失效,引起全表扫描。

where City is null 或 ,where City is not null,

解决方法:SQL语法中使用NULL会有很多麻烦,最好索引列都是NOT NULL的;对于is null,可以建立组合索引,nvl(字段,0),对表和索引analyse后,is null查询时可以重新启用索引查找,但是效率还不是值得肯定;is not null 时永远不会使用索引。一般数据量大的表不要用is null查询。

select id from t where num is null

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

select id from t where num=0

(3)查询条件中使用了不等于 *** 作符(<>、!=)会限制索引、引起全表扫描

Where city!='TOKYO'

解决方法:通过把不等于 *** 作符改成or,可以使用索引,避免全表扫描。例如,把column<>’aaa’,改成column<’aaa’ or column>’aaa’,就可以使用索引了。

(4)对索引的主列有限定条件,但是条件使用like *** 作以及值以‘%’开始或者值是一个赋值变量。例如:

where City like '%YOK%'

where City like: City_bind_Variable xl_rao

select from emp where name like '%A' (不使用索引)

select from emp where name like 'A%' (使用索引)

解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like ‘…%’,是会使用索引的;左模糊like ‘%’无法直接使用索引,但可以利用reverse + function index 的形式,变化成 like ‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。

4. or语句使用不当会引起全表扫描

原因:where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。例如:where A=:1 or B=:2,A上有索引,B上没索引,则比较B=:2时会重新开始全表扫描

5.模糊查询效率很低:

原因:like本身效率就比较低,应该尽量避免查询条件使用like;对于like‘%%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。

解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like‘…%’,是会使用索引的;左模糊like

‘%’无法直接使用索引,但可以利用reverse + function index的形式,变化成like‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。

6.查询条件中含有is null的select语句执行慢

原因:Oracle 中,查询字段is null时单索引失效,引起全表扫描。

解决方法:SQL语法中使用NULL会有很多麻烦,最好索引列都是NOT NULL的;对于is null,可以建立组合索引,nvl(字段,0),对表和索引analyse后,is null查询时可以重新启用索引查找,但是效率还不是值得肯定;is not null时永远不会使用索引。一般数据量大的表不要用is null查询。

7查询条件中使用了不等于 *** 作符(<>、!=)的select语句执行慢

原因:SQL中,不等于 *** 作符会限制索引,引起全表扫描,即使比较的字段上有索引

 解决方法:通过把不等于 *** 作符改成or,可以使用索引,避免全表扫描。例如,把column<>’aaa’,改成column<’aaa’or column>’aaa’,就可以使用索引了。

8使用组合索引,如果查询条件中没有前导列,那么索引不起作用,会引起全表扫描;但是从Oracle9i开始,引入了索引跳跃式扫描的特性,可以允许优化器使用组合索引,即便索引的前导列没有出现在WHERE子句中。例如:create index skip1 on emp5(job,empno); 全索引扫描select count() from emp5 where empno=7900; 索引跳跃式扫描select /+ index(emp5 skip1)/ count() from emp5 where empno=7900;前一种是全表扫描,后一种则会使用组合索引。

9 or语句使用不当会引起全表扫描

原因:where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。例如:where A=:1 or B=:2,A上有索引,B上没索引,则比较B=:2时会重新开始全表扫描。

10组合索引,排序时应按照组合索引中各列的顺序进行排序,即使索引中只有一个列是要排序的,否则排序性能会比较差。例如:create index skip1 on emp5(job,empno,date); select job,empno from emp5 where job=’manager’and empno=’10’order by job,empno,date desc;实际上只是查询出符合job=’manager’and empno=’10’条件的记录并按date降序排列,但是写成order by date desc性能较差。

11Update语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

 12对于多张大数据量的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。

 13select count() from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

14sql的where条件要绑定变量,比如where column=:1,不要写成where column=‘aaa’,这样会导致每次执行时都会重新分析,浪费CPU和内存资源。

15不要使用in *** 作符,这样数据库会进行全表扫描,

推荐方案:在业务密集的SQL当中尽量不采用IN *** 作符

16not in 使用not in也不会走索引

推荐方案:用not exists或者(外联结+判断为空)来代替

17> 及 < *** 作符(大于或小于 *** 作符)

大于或小于 *** 作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段 A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。

18UNION *** 作符

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:

select from gc_dfys

union

select from ls_jg_dfys

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。

推荐方案:采用UNION ALL *** 作符替代UNION,因为UNION ALL *** 作只是简单的将两个结果合并后就返回。

19WHERE后面的条件顺序影响

WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响,如

Select from zl_yhjbqk where dy_dj = '1K以下' and xh_bz=1

Select from zl_yhjbqk where xh_bz=1 and dy_dj = '1K以下'

以上两个SQL中dy_dj及xh_bz两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为05%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候05%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。

20查询表顺序的影响

在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下ORACLE会按表出现的顺序进行链接,由此因为表的顺序不对会产生十分耗服务器资源的数据交叉。(注:如果对表进行了统计分析,ORACLE会自动先进小表的链接,再进行大表的链接)

是的,buffer_cache会影响数据库性能,如果全表扫描在buffer_cache中有命中,就不需要从磁盘中读取数据,这样可以提高查询效率。但是,如果没有命中,都要从磁盘中读取,就会降低查询的性能。

信息技术在经济增长中的作用众所周知,21世纪已经进入高速信息化的时代,手机,互联网等信息终端无时无刻不在干预着我们的生活,据统计,整个中国的手机用户突破5亿,互联网用户达到21亿,两项数据均在世界位列第一,如此庞大的信息市场,对中国的经济发展也起着举足轻重的作用。经济全球化的深入发展,以信息技术为代表的科技革命不断取得突破,信息化已经成为各国经济社会发展的强大动力,推动了人类社会以前所未有的速度走向新的历史高度。以信息技术革命为基础的第三次浪潮几乎没有遭遇到地域的限制,这是一次全球性的浪潮。新的经济不再以传统工业为产业支柱,不再以稀缺自然资源为依托,而是以高技术产业为支柱,而发展高技术又离不开信息技术的发展。信息技术为经济发展的贡献,主要表现在以下几个方面:一、信息技术是经济增长的源动力国外一些发达国家对目前经济的分类有这么一种说法:一是朝阳经济,另一种是夕阳经济。多数传统产业已成夕阳经济,现代经济的主要职能是知识和信息的生产和分配,而不再是物质的生产和分配。也许,对于某些国家或企业而言,今后的生产对象主要是“比特(Byte)”,而不是具体以原子构成的产品。信息经济是自90年代以来伴随信息技术迅猛发展而产生的新的经济形式。数字革命、互联网、电子商务和通信技术在这种新经济形式中扮演着重要角色。可以说,信息产业是知识经济的重要载体和经济发展的原动力,信息技术产业已成为发达国家经济新的增长点,是人类社会迈入知识经济时代的加速。(一)、信息技术使知识和信息成为国民经济的重要战略资源。信息技术,尤其是微计算机革命和数字化革命使信息资源计算机化,把浩如烟海、杂乱无章的信息变成有序、有用、有经济价值的信息。人们可以以任何方式进行加工处理,以任何方式按用户的要求进行检索和利用,并可以在任何时间、任何地点获取自己所需要的任何信息,真正意义上和使用价值上把信息变成资源,进而成了现代国民经济的主要经济资源。信息技术的应用使经济中的知识性日益明显,知识已经成为最重要的生产要素和资源,企业中最关键的资产并不是资本而是智力。由于创意、信息和技术越来越成为产品的构成成分,产品和服务中的知识含量增大。国家的经济发展和繁荣在很大程度上将不依赖于自然资源和劳动力的数量与价格,而取决于所拥有的创造知识的能力和技术水平。在新经济的客观现实面前,许多专家学者都提出了把信息作为独立于资本、劳动之外的生产要素。一般说来,经济系统活动过程中都有三股流,即由生产资料、劳动资料等组成的物流;由劳动力和其他能源组成的能量流;以及由组织、计划、指导、协调、控制、管理等组成的为达到一定目标的信息流。信息在这里发挥着最重要的战略资源的作用,因为人们可以通过信息流中的反馈信息调节物流和能量流的数量、方向、速度和目标。信息流可驾驭经济系统中的人和物做合乎目的、有规则的活动。在同样的物质和能量的输入情况下,不同的信息输入会引起不同的经济效果,创造出不同的价值,经济系统中的信息可以转变为价值增值的一种手段。(二)、信息技术促进传统产业的更新与改造,进而优化产业结构。信息技术已成为推动人类文明进步的强大动力,它正在创立新的产业,全面改造和提升传统工业。设计、制造和营销管理都已经或正在实现自动化、智能化、信息化。由计算机控制的机械和生产线代替或减少了劳动者的工作量,提高了效率。计算机虚拟技术的应用加速了产品的设计和生产过程,提高了产品质量和可靠性,降低了成本。网络技术使人们的生产和生活超越了时空和地域的限制,实现跨行业、跨地域、跨国界的合作与集成,逐步走向全球化。工农业和服务业的生产方式和组织形式也相应发生了重大变化。从而导致国家实力的增长、生态环境的改善和人民生活水平的普遍提高。(三)、信息技术显著提高国民经济效率与效益。在信息时代,由于知识的大量产生、创新的不断进行、信息的迅速传递、经济生活节奏的日益加快,因而技术与产品的生命周期愈益缩短。在信息技术领先的美国,30年来美国的国民经济生产总值一直居世界首位,但从事体力劳动的工人的比例却由30年前占劳动人口总数的33%减少到17%。再过10年,还将降到12%。到了2020年将只占不到2%。现在一些自动化程度高的工厂,几乎已经不使用从事体力劳动的工人了。事实上,由于信息产业和信息技术的发展,90年代以来,美国持续实现高增长、高就业、低通涨,预算赤字减小,利率降低,宏观经济环境稳定。美国联邦政府商业部发表的关于信息技术革命及其对美国经济影响的年度报告称:信息技术产业是推动美国目前经济发展最主要的动力,在过去5年中,虽然信息技术产业的规模只占整个经济的8%,但美国经济增长的1/3归功于该行业的发展。信息技术产业的惊人发展已从根本上改变了美国人的生产、消费、通信和娱乐方式。二、信息产业的建设成为各国经济发展的重点随着全球信息技术的飞速发展,信息化建设已经成为国家经济的重头戏,先进的IT产业将带动整个国家的经济发展,这已是世界各国的共识。日本将信息化的成败、IT产业的兴衰与日本经济竞争力的强弱紧密联系,订下信息化立国目标,力争在5年之内成为世界上最先进的IT国家。韩国认为,21世纪是知识和信息决定国际竞争力的时代,信息化、网络化不是一个选择的问题,而是决定国家兴衰存亡的根本大计。欧盟则把建立信息社会与统一欧洲市场和推行欧元等重大项目并列,当作一项具有历史意义的大事来抓。虽然信息化已成为各国的普遍需要,但是各国的信息化战略仍然有各自鲜明的特色。事实证明,立足本国或本地区的历史和实际情况,扬长避短,不随波逐流,才能在滚滚大潮中立于不败之地。下面,我们看一下芬兰这个以信息化带动经济增长的个例:芬兰是世界上信息化程度最高的国家之一,信息技术已融入芬兰整个社会。在近几年的国际竞争力评比中,芬兰一直名列前茅。究其原因,除了芬兰政府长期重视发展教育,建立国家科技创新体系并增加科技投入外,还与其广泛应用信息技术提高劳动生产率带动经济发展密切相关。芬兰从20世纪90年代末开始在信息技术方面进行大量投资,目前已获得巨大效益。随着信息技术的广泛使用和新技术的进一步推广,芬兰全国的劳动生产率目前正以创纪录的速度增长。与其他工业化国家相比,芬兰劳动生产率增长速度相当快,其工业劳动生产率在交通和信息产业方面甚至已超过美国。对信息技术的投入已成为芬兰企业提高生产效率的主要途径。目前,90%的芬兰企业已在互联网上建立了网站。芬兰企业普遍认为,企业可以通过互联网获得大量有关生产活动和市场销售等方面的信息,这些信息为企业的经营决策、技术改造、产品研发和销售提供了充分有力的依据,并且大大提高了企业的工作效率。目前,芬兰所有工业企业都已广泛使用电脑和互联网,服务行业的绝大部分公司企业也已开始普及使用电脑。信息技术的普遍应用,使企业的劳动生产率和雇员的工作效率提高了8%至18%。过去10多年里,芬兰在大力发展信息与通信产业的同时,还利用信息技术改造其传统的森林工业、金属及机械制造业,实现产业结构的整体升级。20世纪90年代以来,芬兰国家技术开发中心先后协调和资助相关企业和研究机构,实施智能系统应用计划、芬兰中小企业信息化计划等项目,大大促进了芬兰传统产业的信息技术改造和整体技术水平的提高。通过信息技术改造,芬兰森林工业、金属及机械制造业的技术密集程度得到加强,成为信息技术、人工智能技术和自动化技术的综合体,生产效率明显提高。在当前全球竞争进一步加剧的情况下,芬兰政府于2003年9月通过了一项进一步发展信息社会的规划,力争通过全社会充分利用信息技术,进一步增强芬兰在国际上的竞争力,提高本国的劳动生产率,消除地区之间的差距,确保全民的福利和生活质量。芬兰政府力求通过这一规划达到以下目标:所有公民都有机会享受信息社会所提供的服务,并能有机会学习和掌握利用信息技术的基本技能;芬兰所有的公司企业、团体和组织都能充分利用信息技术,以改进其服务并加强其竞争力;各行各业的员工都能具备较高的信息技术水平,确保芬兰不断获得能够适应信息社会发展的高质量的劳动力;进一步加大在科研和产品研发方面的投入,以确保芬兰在利用信息技术方面继续走在世界前列。三、我国信息技术的产业战略我国传统的信息产业是随着社会主义市场经济的发展和国民经济对传统信息新产品与服务需求的增长而不断增长的。国家一系列推动信息产业发展的方针政策、法律法规的不断完善和信息与信息产业理论研究的不断深入,以及信息产业管理水平的不断提高,促进了我国信息产业的快速发展。目前,我国的信息产业正处于蓬勃发展的历史阶段,不仅需求旺盛,发展迅速,而且竞争激烈,效益提高,在国民经济发展和社会进步中的倍增作用与重要地位日益突出,成为21世纪新经济的战略产业。但也不难发现,我国信息产业的许多领域在国际上并没有什么竞争力,在这新形势下,我国要在21世纪进入世界信息产业大国和强国的行列,必须采取相应的对策:(一)、推行工业与信息化相结合的方针,研究信息产业与信息经济的发展规律,处理好信息产业发展过程中统一决策、多层次分级管理、多元化和多样化经营的关系。我国正处在工业化中期向后期过渡的发展阶段,又面临着全球信息化的挑战和机遇,发达国家已开始从工业社会向信息社会过渡,“建立网络社会”的呼声日益高涨。在这种情况下,我国决不能埋头工业化而置信息化于不顾,也不能脱离工业化现状盲目追求信息化,而应实施“机遇战略”,把工业化与信息化结合起来,用信息化促成工业化,引导新世纪的工业向高增值、高竞争力、高信息含量的方向发展,用工业化支持信息化,为信息产业的发展和信息基础设施的建设提供物资、能源、资金、人才以及市场。(二)、分析国内外环境,注重研究和开发,抓好大型企业集团和放活中小企业相结合,运用市场机制与依靠政策法规相结合,加强协调,及时调整产业发展方向与结构。收集技术、市场等信息,分析国际国内影响各部分信息产业发展的环境变化,捕捉机遇,供宏观决策和微观经营参考。这种工作在我国相当薄弱,亟需加强。增加研究和开发费用,加强研究和开发力量,使企业逐步成为研究和开发的主体。在信息产业中既有竞争性产业又有基础性产业。对前者而言,引入竞争机制是天经地义的事情,对后者而言,近几年来的国际经验表明,适度引入竞争机制也是提高服务质量、抑制价格上涨的有效手段。过去被认为是“天然垄断”的行业,由于技术变革和市场变迁,现在已开始程度不同地加入竞争行列。所以,运用市场机制对发展信息产业来说是绝对必要的。但反映市场规律的政策法规同样是不可缺少的和十分重要的。因为政府在信息产业发展全过程中扮演着越来越重要的角色,没有政府的干预和协调,市场是不会自行发挥正面作用而无负面效应的。当然,政府的干预必须合理,协调必须恰当。同时,这种干预和协调要及时、灵活,并富于d性。任何盲目指挥的后果不会亚于市场的失败。政府是帮助而不是代替企业,解决企业不能解决的问题。例如,为产业指明发展方向,在全球生产链中找到本国产业的定位,积极扩展本国产业的营销渠道,并根据世界行情不失时机地调整本国产业的相应结构。(三)、从领导、规划、管理、政策等各方面,积极加强信息产业的薄弱环节,即信息服务业的发展,使其与信息产业其他部分发展相适应,并逐步发挥它对信息产业的引导和推动作用。信息服务业包括数据库服务、软件服务、网络服务、系统集成服务等行业,它们在整个信息产业中的地位和作用,至今未被我国社会各界所充分认识。信息产业的其他部分都有相应的管理部门,惟有这一部分处于多头分散管理以至无人管理的状态。由于信息产业各个部分的相互渗透和融合,电子工业和邮电事业等部门开始把业务范围向信息应用服务或信息增值服务延伸,出现“电子信息产业”和“信息通信产业”等新称谓,而且这两个部门在数据联网服务的领域相互交叉重叠,有所争夺。事实上,信息服务业同电子工业和邮电事业既有密切联系又有明显差别。为了遵循信息服务业的发展规律,推进信息服务业的发展,理应有单独的管理部门。同时还应加强组织领导和统一规划。虽然国家计委的长期规划和产业政策司在规划信息服务业的发展方面做了大量工作,我国信息协会也对加快信息服务业发展问题多次呼吁和写报告,但是由于没有对口的管理部门,全国性的业务协调和规范化管理以及有关投资、财税、信贷、资费(价格)等等政策扶植,迟迟难于落实而告吹。信息服务业滞后对国民经济的影响,短期内似乎不甚明显,但时间越长后果的严重性将越来越清晰。因此,需及早解决信息服务业的管理和发展问题。(四)、人才为本,教育为先,为发展信息产业加强人力资源的开发和利用。我国在20世纪50年代的工业化初期,曾大规模培养工业化所需的人才,并源源不断地从其他战线向工业战线输送人才。当时的一个口号是,“要造就一支产业大军”。那么,在现今信息化启动时期,我国同样需要高瞻远瞩,培养和造就一大批为信息化所需要的发展信息产业的技术人才和管理人才。在高等学校的专业设置上,应适当增加信息科技、信息工程、信息经济、信息管理等院系。在信息产业的各部门和单位内,应大力加强从业人员的在职培训。在企业实践中,应物色和造就一批信息企业家。同时,还应创造条件吸引海外留学人员归国工作,使他们致力于信息产业的发展;合理规范信息产业领域各类人才的流动,使他们更好地发挥自己的聪明才智,为发展信息产业效劳。信息产业是21世纪的战略产业,它的发展不仅关系到利润,而且关系到一国在世界经济、政治乃至军事中的能力和地位。我们应当清楚地认识到时代的规律,加速培育自己的信息产业,发展信息经济,使我国经济保持健康快速增长,在国际竞争中立于不败之地。

安华金和的数据库安全评估系统可以对数据库中风险进行扫描,通过提供必要的连接信息,可以对数据库中存在的漏洞情况、配置缺陷情况、弱口令情况进行扫描,形成不同类型、不同细致程度的扫描报告,并在扫描报告中给出修复建议。

以上就是关于如何查找Oracle中存在全表扫描的SQL语句全部的内容,包括:如何查找Oracle中存在全表扫描的SQL语句、buffer_cache会引起全表扫描性能下降、我国免费开放互联网扫描数据库有什么作用与意义等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9797951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存