问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何提高sql语句的执行效率

发布网友 发布时间:2022-04-21 06:34

我来回答

4个回答

热心网友 时间:2022-04-07 22:31

1、使用ordered提示

Oracle必须花费大量的时间来剖析多表的合并,用以确定表合并的最佳顺序。SQL表达式涉及七个乃至更多的表合并,那么有时就会需要超过30分钟的时间来剖析,Ordered这个提示(hint)和其他的提示一起使用能够产生合适的合并顺序。

2、使用ordered_predicates

ordered_predicates提示在查询的WHERE子句里指定的,并被用来指定布尔判断(Booleanpredicate)被评估的顺序。在没有ordered_predicates的情况下,Oracle会使用下面这些步骤来评估SQL判断的顺序:子查询的评估先于外层WHERE子句里的Boolean条件。

所有没有内置函数或者子查询的布尔条件都按照其在WHERE子句里相反的顺序进行评估,即最后一条判断最先被评估。每个判断都带有内置函数的布尔判断都依据其预计的评估值按递增排列。

3、*表格合并评估的数量

提高SQL剖析性能的最后一种方法是强制取代Oracle的一个参数,这个参数控制着在评估一个查询的时候,基于消耗的优化器所评估的可能合并数量。

扩展资料:

1、表设计的优化,数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询效率。

2、语句的查询优化,保证在实现功能的基础上,尽量减少对数据库的访问次数;

3、建立高效的索引创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略。

大型数据库有两种索引即簇索引和非簇索引,一个没有簇索引的表是按堆结构存储数据,所有的数据均添加在表的尾部,而建立了簇索引的表,其数据在物理上会按照簇索引键的顺序存储。个表只允许有一个簇索引。

4、强制查询转换,有时候oracle 的优化器未必能走正确的查询路线,这个时候就需要添加一些hint 之类的来规定他的执行路线。当然了,这个未必是最好的处理方案。因为虽然现在走这个路线是对的,以为因为数据的变化到这这个HINT 变得不可取。

热心网友 时间:2022-04-07 23:49

1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。
调整不良SQL通常可以从以下几点切入:
? 检查不良的SQL,考虑其写法是否还有可优化内容
? 检查子查询 考虑SQL子查询是否可以用简单连接的方式进行重新书写
? 检查优化索引的使用
? 考虑数据库的优化器

2. 避免出现SELECT * FROM table 语句,要明确查出的字段。

3. 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。

4. 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。

5. 在判断有无符合条件的记录时建议不要用SELECT COUNT (*)和select top 1 语句。

6. 使用内层限定原则,在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量。

7. 应绝对避免在order by子句中使用表达式。

8. 如果需要从关联表读数据,关联的表一般不要超过7个。

9. 小心使用 IN 和 OR,需要注意In集合中的数据量。建议集合中的数据不超过200个。

10. <> 用 < 、 > 代替,>用>=代替,<用<=代替,这样可以有效的利用索引。

11. 在查询时尽量减少对多余数据的读取包括多余的列与多余的行。

12. 对于复合索引要注意,例如在建立复合索引时列的顺序是F1,F2,F3,则在where或order by子句中这些字段出现的顺序要与建立索引时的字段顺序一致,且必须包含第一列。只能是F1或F1,F2或F1,F2,F3。否则不会用到该索引。

13. 多表关联查询时,写法必须遵循以下原则,这样做有利于建立索引,提高查询效率。格式如下select sum(table1.je) from table1 table1, table2 table2, table3 table3 where (table1的等值条件(=)) and (table1的非等值条件) and (table2与table1的关联条件) and (table2的等值条件) and (table2的非等值条件) and (table3与table2的关联条件) and (table3的等值条件) and (table3的非等值条件)。
注:关于多表查询时from 后面表的出现顺序对效率的影响还有待研究。

14. 子查询问题。对于能用连接方式或者视图方式实现的功能,不要用子查询。例如:select name from customer where customer_id in ( select customer_id from order where money>1000)。应该用如下语句代替:select name from customer inner join order on customer.customer_id=order.customer_id where order.money>100。

15. 在WHERE 子句中,避免对列的四则运算,特别是where 条件的左边,严禁使用运算与函数对列进行处理。比如有些地方 substring 可以用like代替。

16. 如果在语句中有not in(in)操作,应考虑用not exists(exists)来重写,最好的办法是使用外连接实现。

17. 对一个业务过程的处理,应该使事物的开始与结束之间的时间间隔越短越好,原则上做到数据库的读操作在前面完成,数据库写操作在后面完成,避免交叉。

18. 请小心不要对过多的列使用列函数和order by,group by等,谨慎使用disti软件开发t。

19. 用union all 代替 union,数据库执行union操作,首先先分别执行union两端的查询,将其放在临时表中,然后在对其进行排序,过滤重复的记录。
当已知的业务逻辑决定query A和query B中不会有重复记录时,应该用union all代替union,以提高查询效率。

数据更新的效率
1. 在一个事物中,对同一个表的多个insert语句应该集中在一起执行。
2. 在一个业务过程中,尽量的使insert,update,delete语句在业务结束前执行,以减少死锁的可能性。

数据库物理规划的效率

为了避免I/O的冲突,我们在设计数据库物理规划时应该遵循几条基本的原则(以ORACLE举例):
�8�5 table和index分离:table和index应该分别放在不同的tablespace中。

�8�5 Rollback Segment的分离:Rollback Segment应该放在独立的Tablespace中。

�8�5 System Tablespace的分离:System Tablespace中不允许放置任何用户的object。(mssql中primary filegroup中不允许放置任何用户的object)

�8�5 Temp Tablesace的分离:建立单独的Temp Tablespace,并为每个user指定default Temp Tablespace

�8�5避免碎片:但segment中出现大量的碎片时,会导致读数据时需要访问的block数量的增加。对经常发生DML操作的segemeng来说,碎片是不能完全避免的。所以,我们应该将经常做DML操作的表和很少发生变化的表分离在不同的Tablespace中。

当我们遵循了以上原则后,仍然发现有I/O冲突存在,我们可以用数据分离的方法来解决。
�8�5 连接Table的分离:在实际应用中经常做连接查询的Table,可以将其分离在不同的Taclespace中,以减少I/O冲突。

�8�5 使用分区:对数据量很大的Table和Index使用分区,放在不同的Tablespace中。

在实际的物理存储中,建议使用RAID。日志文件应放在单独的磁盘中。

热心网友 时间:2022-04-08 01:24

1、合理使用索引2、避免或简化排序3、消除对大型表行数据的顺序存取4、避免相关子查询5、避免困难的正规表达式,如matches、like等6、使用临时表加速查询7、用排序来取代非排序磁盘存取8、避免使用不充分的连接条件,如左(右)连接9、用存储过程10、不要随意使用游标11、事务处理,要注意分割处理

热心网友 时间:2022-04-08 03:15

一、数据库建立合理的索引。二、精简SQL语句中的查询(如少用联合和汇总以及模糊查询)三、增加服务器的硬件(加内存是最好的解决方法)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何开机自动后台运行qq并且不给发现?~ 和平精英必备吃鸡小技巧汇总介绍_和平精英必备吃鸡小技巧汇总是什么_百 ... 如何把QQ设置成后台运作!就是开机就启动但是有看不到!只有在进程里面看... 如何实现开机QQ自动运行并自动运行于后台 如何让QQ程序 一开机就后台运行 关于高恪软路由的L2TP客户端踩的坑 如何开机自动后台运行qq并且不给发现? ...然后我就不敢多问了。我就想知道白细胞过高,会不会的白血病,有... ...人们穿鞋化纤衣料的衣服时,衣服常会吸附在身上。请解释这种现象产生... 在干燥的季节里,人们穿着化纤衣料的衣服时,衣服常会吸附在身上.请解释... 什么叫SQL语句的优化 如何进行SQL性能优化 优化sql 语句的几种方式 如何优化SQL语句 SQL语句如何优化? SQL语句的几种优化方法 开发中,SQL语句优化有哪些方法? 三种用ppt创建演示文稿的方法 列举powerpoint2010创建演示文稿的三种方式 创建演示文稿主要有那四种方式 如何创建或打开演示文稿 ppt怎么样创建演示文档3个节 创建演示文稿的方法有几种 创建演示文稿 创建演示文稿的一般步骤是什么 在ppt中演示文稿的创建方法有几种 powerpoint2003中创建演示文稿的一般步骤是什么 创建演示文稿的三种方法? 前列腺手术后,要禁止肛门排气吗??几天?? 手术后一定要行肛门排气后才可以进流质? 谁能告诉我怎样优化sql语句? SQL语句效率优化 怎样进行sql数据库的优化 sql语句的优化 SQL 语句优化问题 SQL语句怎么可以优化呢 sql语句性能如何优化?? 如何优化sql语句? 如何优化SQL语句提高数据库效率 数据库中怎么优化SQL语句? SQL 语句优化,该怎么处理 提手旁加共念什么 一个提手加共念什么 提手上加共读什么 提手旁加一个共字念什么 一个提手一个共念什么 一个提手两个巳和一个共是什么字? 一个提手,右上头两个巳,右下头一个共。咋读。 共字可以加什么偏旁 一个提手一个龙念什么