当前位置:首页 » 编程语言 » 你做过哪些sql优化
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

你做过哪些sql优化

发布时间: 2022-06-12 00:28:21

A. sql语句的几种优化方法

1、尽可能建立索引,包括条件列,连接列,外键列等。

2、尽可能让where中的列顺序与复合索引的列顺序一致。

3、尽可能不要select *,而只列出自己需要的字段列表。

4、尽可能减少子查询的层数。

5、尽可能在子查询中进行数据筛选 。

B. 如何进行SQL优化请写出三种以上的方法,并分别做出解释说明

摘要 1:mysql所在服务器内核 优化;此优化可由系统运维人员完成

C. 一条sql执行过长的时间,你如何优化,从哪些方面

1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)

2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合

3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度

4、针对数量大的表进行历史表分离(如交易流水表)

5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步

6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等

7、查看mysql执行日志,看看是否有其他方面的问题

个人理解:从根本上来说,查询慢是占用mysql内存比较多,那么可以从这方面去酌手考虑

D. 列举sql优化有哪些方式

sql优化的方式有:

1、选择最有效率的表名顺序(只在基于规则的优化器中有效):

ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。

2、WHERE子句中的连接顺序:

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

3、SELECT子句中避免使用 ‘ * ‘:

ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 。

4、 减少访问数据库的次数:

ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等。

5、 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 。

6、 使用DECODE函数来减少处理时间:

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。

7、整合简单,无关联的数据库访问:

如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)。

E. 开发中,SQL语句优化有哪些方法

看你数据库类型和框架是否支持。

一般开发中遇到慢SQL存在3个问题(索引健全的情况下)。

  1. 数据量多导致总行数慢,因为数据在不归档、迁移、转总账的情况下会不断积压。权限越高看见的数据量就越大,数据量越大总行数就越高。一般框架是以分页的SQL为基础计算总行数的。这样就会导致扫描行数高物理读高查询速度慢。优化方案就是总行数进行状态归档,以归档+实时的方式展现出来

  2. 连表超过多,部分数据表是单独的,但是不同部门的数据又有关联性,领导要看全生命周期或者流程数据的情况下必须多表相连。这样由于N个明细表导致笛卡儿积先不说,逻辑复杂连表多会消耗CPU,哪怕你查询能500毫秒内显示但是如果多人同时查就让CPU超100%甚至做成锁等待等堵塞。这个情况就是要用类似“云计算”的分布式计算。通过触发器、存储过程等规定时间内吧业务表数据计算好并写到展示表中,直接通过展示表进行关联,这样锁表也于业务表无关,关联表也能变少达到减少CPU消耗的目的。

  3. iops与cpu占比高导致数据库瘫痪。第2点看出如果CPU高数据库全SQL都会慢,IOPS也一样。SQL慢会导致事务中的查询慢,解放事务变慢了其他查询就会锁等待状态变成堵塞。所以遇到大规模的查询是否先查主键然后通过游标一个一个计算再进临时表。这个是消耗时间和内存换CPU和IOPS的一个例子。反正服务器资源最高怎样开发应该是了解的,如何管制资源之间的平衡这个很重要。

举个例子,部分MYSQL框架喜欢一次性把数据库都导出来,然后减少子查询,这个算法针对有效的基础数据这样是可行的。针对业务数据应该没人会用,但是基础数据中也可能会存在海量的情况,比如坐标轨迹、省市区、电话号码归属等。如果无脑应用这个框架会导致查询起来很慢。

F. sql调优的几种方式

你好,
SQL优化的一些方法
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。
3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描。
5.in 和 not in 也要慎用,否则会导致全表扫描,
6.下面的查询也将导致全表扫描:
select id from t where name like '%abc%'
7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
8.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

G. 工作中常用的几种sql优化技巧

例如:
1、尽可能建立索引,包括条件列,连接列,外键列等。
2、尽可能让where中的列顺序与复合索引的列顺序一致。
3、尽可能不要select
*,而只列出自己需要的字段列表。
4、尽可能减少子查询的层数。
5、尽可能在子查询中进行数据筛选

H. 列举sql优化有哪些方式方法 博客园

sql优化的方式有:

1、选择最有效率的表名顺序(只在基于规则的优化器中有效):

ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。

2、WHERE子句中的连接顺序:

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

3、SELECT子句中避免使用 ‘ * ‘:

ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 。

4、 减少访问数据库的次数:

ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等。

5、 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 。

6、 使用DECODE函数来减少处理时间:

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。

7、整合简单,无关联的数据库访问:

如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)。

I. 做过哪些oracle sql优化

一:使用where少使用having;
二:查两张以上表时,把记录少的放在右边;
三:减少对表的访问次数;
四:有where子查询时,子查询放在最前;
五:select语句中尽量避免使用*(执行时会把*依次转换为列名);
六:尽量多的使用commit;
七:Decode可以避免重复扫描相同的记录或重复连接相同的表;
八:通过内部函数也可提高sql效率;
九:连接多个表时,使用别名并把别名前缀于每个字段上;
十:用exists代替in
十一:not exists代替 not in(not in 字句将执行一个内部的排序和合并,任何情况下,not in是最低效的,子查询中全表扫描了。为了避免使用not in,可以改写成outer joins或not exists);
十二:表连接比exists更高效;
十三:用exists替换distinct

J. 如何进行SQL性能优化

这里分享下mysql优化的几种方法。

1、首先在打开的软件中,需要分别为每一个表创建 InnoDB FILE的文件。