首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏北京马哥教育

    优化 SQL SELECT 语句性能6 个简单技巧

    SELECT语句的性能调优有时是一个非常耗时的任务,在我看来它遵循帕累托原则。20%的努力很可能会给你带来80%的性能提升,而为了获得另外20%的性能提升你可能需要花费80%的时间。 根据我多年编写和运行SQL语句的经验,我开始开发一个检查列表,当我试图提高查询性能时供我参考。在进行查询计划和阅读我使用的数据库文档之前,我会参考其中的内容,数据库文档有时会很复杂。 检查索引 在SQL语句的WHERE和JOIN部分中用到的所有字段上,都应该加上索引。进行这个3分钟SQL性能测试。不管你的成绩如何,一定要阅读那些带有信息的结果。 编写SQL语句是一个过程,通常需要大量编写和测试SQL语句的迭代过程。在开发过程中,你可能将表添加到查询中,而这对于SQL代码返回的数据可能不会有任何影响。 给出以下SQL语句: ? 在sales表中利用年和月增加一列,可以提高性能。更新后的SQL语句将如下: ?

    2.1K110发布于 2018-05-04
  • 来自专栏老虎刘谈oracle性能优化

    是什么操作把SQL性能提高了6倍多?

    今天这个案例不看SQL,看优化前后的执行计划就可以了: 优化前,最终返回3096条记录,耗时4146秒(执行时间看第一行中间的timeline): 优化后,最终返回185K记录,耗时653秒: 优化后SQL执行计划没有变化,耗时最多步骤返回的记录数多了,最终返回的记录数也是优化前的6倍多,执行时间却变成了优化前的1/6,到底做了什么优化操作? 出现性能问题的文章,在分析SQL执行计划时使用的是plsql developer工具。 因为,有经验的DBA遇到SQL第二次执行比第一次慢的情况,第一时间就能想到是cardinality feedback 的问题。 老虎刘有一个很简单的cardinality feedback的test case,可以用来测试sql profile工具(使用coe_load_sql_profile.sql脚本): create table

    43810编辑于 2022-06-22
  • 来自专栏程序员奇点

    SQL 性能优化

    ,在FROM 子句中包含多个表的情况下,你必须选择记录条数最小的表作为基础表, 如果有3个以上的表连接查,选择交叉表(Insertection table)作为基础表,交叉表指的是被其他表锁引用的表 性能优化 SQL语句中IN包含的值不应过多 MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。 等价于 select * from 表A where exists(select * from 表B where 表B.id=表A.id) 区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键 如何高效的写出一个替代not exists的sql语句?

    1.1K40发布于 2019-08-30
  • 来自专栏用户8907256的专栏

    SQL性能优化以及性能测试

    SQL性能优化以及性能测试 博主介绍 笛卡尔连接 分页limit的sql优化的几种方法 笛卡尔连接 例1: 没有携带on的条件字句,此条slq查询的结构集等价于,a表包含的条数*b表包含的乘积: select * from table a cross join table b; 例2:拥有携带on字句的sql,等价于inner join: select * from table a cross join table b on a.id=b.id; 分页limit的sql优化的几种方法 规则;表包含的数据较少的数据量,作为驱动表(小表驱动大表,一般mysql的优化器会做出相应的优化的,但是为了防止一些抽风现象可以用 show table status where NAME='表的名称隔行' 实例6: //优点不操作具体的表,无论表的数据量有多大,都可以迅速执行. 通过explain 查看sql性能如果Extra的值为null时,说明是可以通过索引避免排序的.如果Extra的值是Using filesort 是不可以进行索引排序的 select * from table

    1K30编辑于 2022-04-14
  • 来自专栏老虎刘谈oracle性能优化

    是什么操作把SQL性能提高了6倍多?-续

    上一期留下了一个悬念,有几个朋友也参与了留言,大家都看出了主要的区别是IO 请求多了,却没想到一个简单的索引重建就带来了这么大的性能提升。

    27710编辑于 2022-06-22
  • 来自专栏技术杂记

    SQL 精编(6

    其它管理工具 ---- mysqldump time mysqldump -u root -p fake_xx > fake_xx.sql time mysqldump -u root -p tab_xx conversations > /tmp/conversations.backup.sql ---- mysqladmin /usr/bin/mysqladmin flush-logs ; /etc/ mysqlslap --no-defaults --debug-info -uroot -p --number-int-cols=5 --number-char-cols=10 --auto-generate-sql --auto-generate-sql-add-autoincrement --concurrency=100 --number-of-queries=10000 --iterations=3 --engine --auto-generate-sql-add-autoincrement --concurrency=100 --number-of-queries=10000 --iterations=10 --

    59620发布于 2021-10-19
  • 来自专栏辰远

    SQL电脑性能测试

    循环添加10w行数据,测试索引效果 USE myschool; #创建测试表 DROP TABLE IF EXISTS Test; CREATE TABLE Test( id INT, NAME VARCHAR(50) ); # 循环添加10W条数据数据 DROP PROCEDURE IF EXISTS usp_initial_data; DELIMITER // CREATE PROCEDURE usp_initial_data() BEGIN DECLARE i INT; SET

    3.1K40编辑于 2022-11-21
  • 来自专栏JAVA高级架构

    SQL性能优化梳理

    第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁 被用来设计处理大量短期事务,具有高性能和自动奔溃恢复的特性。 MyISAM引擎,不支持事务和行级锁,奔溃后无法安全恢复。 from triangle; +-------+-------+------+ | sidea | sideb | area | +-------+-------+------+ | 3 | 4 | 6 "value2"}'); SELECT * FROM json_test WHERE JSON_CONTAINS(name, '$.name1'); ---->来自JVM专家-达 关注explain在性能分析中的使用

    1.3K70发布于 2018-04-19
  • 来自专栏电光石火

    SQL 性能调优

    , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6)使用DECODE函数来减少处理时间 (7) 整合简单,无关联的数据库访问 ,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! 200 回到顶部 (6)使用DECODE函数来减少处理时间 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 性能上的差异,关键看你的from和where子句。比如说如果你的where条件中可以通过索引,那显然 select 1 from ... 的性能比 select * from ... 好。 仔细检查order by语句以找出非索引项或者表达式,它们会降低性能

    4.7K10发布于 2019-12-13
  • 来自专栏JMCui

    SQL优化二(SQL性能调优)

    )负责将更改的buffer 从db buffer cache中写到datafile中去,通过一个dbwn进程(dbw0)就足够了,但是也可以配置更多额外的dbwr进程,它可以提升频繁更改的数据库系统的性能 因为分离了更改数据库buffer的任务:dbwn散列写buffer到disk中,执行快速的顺序写到redo,所以数据库提升了性能。 1.用户提交了一个事务。 优化技巧6:较小的表使用全表扫描,效率更高;较大的表应避免全表扫描,除非涉及全表记录10%以上的查询;避免给记录数少的表建立索引,避免索引开销。 deptno from dept; 优化技巧18:Order By语句中的非索引列会降低性能,可以通过添加索引的方式处理。 优化技巧20:调整SQL语句的目的是为了在执行中使资源的使用减少到最小。除了选择使用不同的SQL语法来优化执行代价,还可以通过调整执行顺序优化SQL

    1.9K61发布于 2018-03-15
  • 来自专栏全栈程序员必看

    编写高性能SQL

    在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一 在多数情况下,Oracle使用索引来更快的遍历表,优化器主要根据定义的索引来提高性能。 在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能SQL语句。    下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。 仔细检查order by语句以找出非索引项或者表达式,它们会降低性能6. IN和EXISTS    有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在where子句中可以使用两种格式的子查询。    

    3.1K20编辑于 2021-12-27
  • 来自专栏Python数据科学

    SQL 性能优化梳理

    第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁 被用来设计处理大量短期事务,具有高性能和自动崩溃恢复的特性。 MyISAM引擎,不支持事务和行级锁,崩溃后无法安全恢复。 +-------+-------+------+ | sidea | sideb | area | +-------+-------+------+ | 3 | 4 | 6 name2": "value2"}'); SELECT * FROM json_test WHERE JSON_CONTAINS(name, '$.name1'); 来自JVM专家-达 关注explain在性能分析中的使用

    1K20发布于 2019-11-21
  • 来自专栏电光石火

    SQL 性能调优

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! 200 (6)使用DECODE函数来减少处理时间 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表 性能上的差异,关键看你的from和where子句。比如说如果你的where条件中可以通过索引,那显然 select 1 from ... 的性能比 select * from ... 好。 也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。 仔细检查order by语句以找出非索引项或者表达式,它们会降低性能

    3.7K60发布于 2018-01-18
  • 来自专栏程序员的成长之路

    SQL 性能优化梳理

    第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁 被用来设计处理大量短期事务,具有高性能和自动崩溃恢复的特性。 MyISAM引擎,不支持事务和行级锁,崩溃后无法安全恢复。 +-------+-------+------+ | sidea | sideb | area | +-------+-------+------+ | 3 | 4 | 6 name2": "value2"}'); SELECT * FROM json_test WHERE JSON_CONTAINS(name, '$.name1'); 来自JVM专家-达 关注explain在性能分析中的使用

    87020发布于 2019-11-23
  • 来自专栏猿人谷

    Oracle SQL性能优化

    语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5)      在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6)      使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表 (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML) (10) 尽量多使用COMMIT: 只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为 效率.: 复杂的SQL往往牺牲了执行效率. (33) 避免使用耗费资源的操作: 带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行耗费资源的排序(SORT)功能.

    3.6K70发布于 2018-01-17
  • 来自专栏.NET企业级解决方案应用与咨询

    SQL 性能优化 总结

    SQL 性能优化 总结 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 (5)在SQL*Plus , SQL*Forms和Pro*C 中重新设置ARRAYSIZE 参数, 可以增加每次数据库访问的检索数据量 ,建议值为200。 (6)使用DECODE函数来减少处理时间: 使用DECODE 函数可以避免重复扫描相同记录或重复连接相同的表。 (10)尽量多使用COMMIT: 只要有可能,在程序中尽量多使用 COMMIT, 这样程序的性能得到提高,需求也会因为 COMMIT所释放的资源而减少: COMMIT所释放的资源: 语句:目前各种关于SQL优化的图形化工具层出不穷,大家自己搜索。

    2.5K20发布于 2019-09-17
  • 来自专栏简单就是美!

    P6Spy & SQL Profiler & IronTrack SQL

    ----DB2 Magazine P6Spy & SQL Profiler & IronTrack SQL P6Spy是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过P6Spy我们可以对SQL语句进行拦截,相当于一个SQL语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。 6、运行你的应用程序或Web应用程序,可以在spy.log里看到监测到的sql详细记录信息了。 二、结合SQL Profiler进行图形化监控与使用 1、从 http://www.jahia.net/ 下载SQL Profiler的文件包进行安装; 2、把p6spy.jar及sqlprofiler.jar 6、设置监听端口号monitorport=2000 6、先运行 java -jar irontracksql.jar 来启动IronTrack SQL; 7、再启动你的应用程序或服务器; 8、可以在

    90020发布于 2019-02-28
  • 来自专栏数仓建模

    Spark UI (6) - SQL页面

    接上文 Spark UI (3、4、5) - Storage、Environment、Executors页面SQL页面展示了作业执行Spark SQL的情况, 它会按SQL层面展示一条SQL在Spark 图片SQL详情页面会展示SQL在spark中执行的具体计划(DAG图):INSERT OVERWRITE TABLE `${target.table}`select t1.report_date, join mart_grocery.dim_op_poi t2 on t1.grid_poi_id=t2.poi_id where t1.dt = '20220410'图片下方的Details会展示SQL 图片2.ETL任务Stage和DAG的对应关系通过stage DAG图中的coordinator id可以找到在SQL页面对应的位置, 例如:图片

    1.6K30编辑于 2022-09-05
  • 来自专栏一个爱吃西瓜的程序员

    学习SQL6】-复杂查询

    SQL的角度来看,视图和表是一样的,只是视图并不存储数据,而是存储SELECT语句。 视图的优点: 视图的优点大体上有两点。 ● 第一点是由于视图无需保存数据,因此可以节省存储设备的容量。 product_type | cnt_product--------------+------------- 办公用品 | 2 (1 行记录) 注释: ● 对大多数DBMS来说,多重视图会降低SQL 性能,所以我们应该避免使用多重视图。 product_type | cnt_product--------------+------------- 厨房用具 | 4 (1 行记录) 但是随着子查询的层数增加,SQL sale_price) FROM Product; 执行结果: avg----------------------- 2097.5000000000000000 (1 行记录) 然后完整的SQL

    1.2K90发布于 2018-04-04
  • 来自专栏JavaPark

    SQL 进阶挑战(6 - 10)

    SQL6 删除记录(一) 描述 现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录,结构如下表: 作答记录表exam_record: start_time是试卷开始时间 submit_time 9001|2021-05-02 10:01:01|2021-05-02 10:05:58|60 5|1003|9001|2021-09-05 19:01:01|2021-09-05 19:40:01|49 6| DELETE FROM exam_record WHERE score < 60 AND TIMESTAMPDIFF(MINUTE, start_time, submit_time) < 5; SQL7 9001|2020-01-01 22:11:12|2020-01-01 23:16:12|50 4|1002|9001|2021-05-02 10:01:01|2021-05-02 10:06:58|60 6| TIMESTAMPDIFF(MINUTE, start_time, submit_time) < 5 OR submit_time IS NULL ORDER BY start_time LIMIT 3; SQL8

    54130编辑于 2022-06-15
领券