首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试官:不会sql优化?出门右转顺便带上门,谢谢!

但我之前没有详细去了解过这些东西啊,我就瞎鸡儿吹了,毕竟我干过两三年crud,sql还是写过不少遇到过一些特别长sql,执行时间特别长sql,所以以前经常牺牲午睡时间给客户出报表还是有点效果...SQL执行计划(以MySQL为例) 1、如何查看sql执行计划 在需要执行查询SQL前添加一个关键字“EXPLAIN” ?...(2)DERIVED 包含在From中查询,MySQL会递归执行并将结果放在一个临时表中,成为派生表,从子查询中派生出来。...第一个select被标记为外查询来执行,如果UNION被From子句中查询包含,那么它第一个Select会被标记为DERIVED。...MySQL中无法利用索引完成排序操作称为"文件排序" Using temporary 使了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。

80520

编写高性能SQL

在这些where句中,即使某些列存在索引,但是由于编写了劣质SQL,系统在运行该SQL语句时不能使用该索引,而同样使用全表扫描,这就造成了响应速度之极大降低。  1....也就是说如果某列存在空值,即使对该列建索引不会提高性能。    任何在where句中使用is null或is not null语句优化器是不允许使用索引。 ...Order by语句 ORDER BY语句决定了Oracle如何将返回查询结果排序。Order by语句对要排序列没有什么特别的限制,可以将函数加入列中(象联接或者附加等)。...换句话说,即使不在查询where句中显式加入NOT词,NOT仍在运算符中。    对这个查询,可以改写为不使用NOT:    虽然这两种查询之结果一样,但是第二种查询方案会比第一种查询方案更快些。...最简单办法就是在where句中使用查询。在where句中可以使用两种格式查询。    第一种格式是使用IN操作符;第二种格式是使用EXIST操作符。

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

T-SQL进阶:超越基础 Level 2:编写查询

WHERE句中子查询示例 有时你想根据SELECT语句结果来驱动WHERE子句条件。 当您在WHERE句中SELECT语句时,此SELECT语句实际上是一个查询。...清单7中查询显示了我如何在FROM子句中使用查询。 当在FROM子句中使用查询时,从子查询生成结果集通常称为派生表。...在修改数据句中使用查询示例 到目前为止,我所有示例一直在演示如何在SELECT语句不同部分中使用查询。 可以在INSERT,UPDATE或DELETE语句中使用查询。...语句中查询 在清单10中代码中,我使用一个查询来计算要插入列MaxOrderDate值。...这只是在INSERT语句中如何使用查询一个示例。 请记住,可以在UPDATE和/或DELETE语句中使用查询。

5.9K10

SQL知识点总结

where:过滤表中数据条件,主要对应是表中一条条记录 group by:如何将上面过滤出数据按照哪个类分组归类 having:对上面已经分组数据进行过滤条件 select:查看结果集中哪个列也就是哪个字段...而结果集列名称一般指的是select 后字段 As "结果集列名称"。 (4)GROUP BY 语句中空值,如果分组列包含一个空值则该行将成为结果一个组。...GROUP BY 子句用来分组 WHERE 子句输出。     HAVING 子句用来从分组结果中筛选行。 对于可以在分组操作之前或之后应用搜索条件,在 WHERE句中指定它们更有效。...使用自连接时必须为表取别名,使之在逻辑上称为两张表。...3、外连接 在内连接中,只有满足连接条件元组才能作为结果输出,而外连接既可以输出满足条件元组,可以输出不满足条件元组。

2.2K10

【数据库】03——初级开发需要掌握哪些SQL语句

事实上查询时,select,from,where子句并不是顺序执行。正确理解如下。 1.为from所列出关系产生笛卡尔积。 2.在1结果上应用where句中指定谓词。...由于where句中谓词可以对比较结果进行and,or和not布尔运算,因此这些布尔运算定义被拓展成可以处理unknown值。 and。...8.5 from子句中查询 前面的查询都是在where句中使用,下面介绍在from子句中使用查询。...我们可以使用from子句或者where句中嵌套子查询编写上述查询,但是嵌套子查询远不如上面的with子句逻辑清晰。它还允许一个查询内多个地方使用这种临时关系。...8.7 标量子查询 SQL允许查询出现在返回单个值表达式能够出现任何地方,只要该查询只返回一个包含单个属性元组,这样查询成为标量子查询。举个栗子,列出所有的系以及每个系中教师总数。

3.5K31

高效sql性能优化极简教程

6,使用exists替代distinct 当提交一个包含一对多表信息(比如部门表和雇员表)查询时,避免在select子句中使用distinct,一般可以考虑使用exists代替,exists使查询更为迅速...,因为查询条件一旦满足,立马返回结果。...子句中对列任何操作结果都是在sql运行时逐行计算得到,因此它不得不进行全表扫描,而没有使用上面的索引;如果这些结果在查询编译时就能得到,那么就可以被sql优化器优化,使用索引,避免全表扫描,因此sql...,使索引失效,如果不产生大量重复值,可以考虑把子句拆开;拆开句中应该包含索引; select count(*) from stuff where id_no in('0','1') 可以拆开为:...所以,其工作起来相当有效率,而我们服务器不希望有太多进程,线程和数据库链接,这是极大占服务器资源事情,尤其是内存。

3.2K50

十五、查询EXISTS和IN使用

一、查询 IN 查询 IN 允许我们在 WHERE句中过滤某个字段多个值,语法如下: SELECT column_nam FROM table_name WHERE column_name IN...,valueN) 如果运算符 in 后面的值来源于某个查询结果,并非是指定几个值,这时就需要用到查询。查询又成为内部查询或嵌套查询,即在 SQL 查询 WHERE句中嵌入查询语句。...select A.* from student A where A.stu_no in (select B.stu_no from elective B ); 查询选修了计算学生 select A....* from student A where A.stu_no in (select B.stu_no from elective B where B.name='计算机'); 二、查询 EXISTS...奖助查询数据放到查询中左条件验证,根据验证结果(TRUE或FLASE)来决定著查询数据结果是否保留。

1.7K40

SQL复杂查询

执行结果: ? 查询SELECT语句执行顺序 ? 由内到外: 首先执行FROM子句中SELECT语句; 根据1结果执行外层SELECT语句。...查询名称 原则上查询必须设定名称,设定名称是需要使用AS关键字,有时可以省略。 标量子查询 标量子查询就是返回单一值查询,必须而且只能返回表中某一行某一列值。...在WHERE句中使用标量子查询 如何查询出销售单价高于平均销售单价商品?...这时,标量子查询就可以发挥它功效了。 计算平均销售单价标量子查询 SELECT AVG(sale_price) FROM Product; 执行结果: ?...执行结果: ? 这里起关键作用就是在查询中添加WHERE子句条件,该条件意思就是,在同一商品种类中对各商品销售单价和平均单价进行比较。

3K30

MySQL 查询专题

WHERE句中使用圆括号 任何时候使用具有 AND 和 OR 操作符WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序,即使它确实是你想要东西也是如此。...NOT操作符 WHERE句中 NOT 操作符有且只有一个功能,那就是否定它之后所跟任何条件。 GROUP BY 创建分组 GROUP BY 语句根据一个或多个列对结果集进行分组。...这可能会改变计算值,从而影响 HAVING 子句中基于这些值过滤掉分组。...where item_price >= 10 ) 列必须匹配 在 WHERE句中使用查询(如这里所示),应该保证SELECT语句具有与 WHERE句中相同数目的列。...作为计算字段使用成为相关子查询 select cust_email from customers where cust_id in (select cust_id from orders where

5K30

【MySQL系列】- MySQL执行计划一览

「关联/相关子查询」:查询执行依赖于外部查询。多数情况下是查询 WHERE句中引用了外部查询包含列。 ❞ id SELECT查询系列号,可以为NULL。...,结果就变成了2条记录,这是因为UNION ALL不需要去重,查到什么结果就返回什么结果,所以不会出现临时表。...:一个查询,其结果无法缓存,必须为外部查询每一行重新计算。...,在 Extra 列中会显示Using where;当使用索引访问来执行对某个表查询,并且该语句 WHERE句中有除了该索引包含列之外其他搜索条件时,在 Extra 列中会显示Using...Using where只是表示 MySQL使用where句中条件对记录进行了过滤。

70920

Oracle查询性能优化

原则一:注意WHERE句中连接顺序: ORACLE采用自下而上顺序解析WHERE子句,根据这个原理,表之间连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录条件必须写在WHERE...当然,你会发现, 在扫描小表时,使用索引同样能提高效率. 代价: 虽然使用索引能得到查询效率提高,但是我们必须注意到它代价....当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描. 2、避免在索引列上使用计算WHERE句中,如果索引列是函数一部分.优化器将不使用索引而使用全表扫描....一般可以考虑用EXIST替换, EXISTS 使查询更为迅速,因为RDBMS核心模块将在查询条件一旦满足后,立刻返回结果....因为查询开销是相当昂贵。具体例子在后面的案例“一条SQL优化过程”中。

2.2K20

SQL优化意义是什么?你用过哪些优化方式

随着系统数据量逐年增加,并发量成倍增长,SQL性能越来越成为IT系统设计和开发时首要考虑问题之一。...SQL性能问题已经逐步发展成为数据库性能首要问题,80%数据库性能问题都是因SQL而导致。面对日益增多SQL性能问题,如何下手以及如何提前审核已经成为越来越多程序员必须要考虑问题。...20,将需要查询结果预先计算好放在表中,查询时候再Select。这在SQL7.0以前是最重要手段。例如医院住院费计算。 21,用OR字句可以分解成多个查询,并且通过UNION 连接多个查询。...’ (10秒) 分析: WHERE句中对列任何操作结果都是在SQL运行时逐列计算得到,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化...EXPLAIN 查询结果还会告诉你你索引主键被如何利用,你数据表是如何被搜索和排序……等等,等等。

1.3K20

手把手教你彻底理解MySQLexplain关键字

(3)DERIVED 在from子句中包含查询被标记为DERIVED(衍生),MySQL会递归执行这些查询,把结果放在临时表中。...(4)SUBQUERY 在select或where句中包含了查询,该查询被标记为SUBQUERY。 (5)UNION 若第二个select查询语句出现在UNION之后,则被标记为UNION。...(2):输出结果中编号为 a 结果集,derived 表示这是一个派生结果集,如 FROM 子句中查询。...注意:key_len只计算where条件中用到索引长度,而排序和分组即便是用到了索引,不会计算到key_len中。...举个例子,有表trb1,存在以下字段,以及一个组合索引idx_age_name 下面查询语句执行结果 key_len值为153、158、null。如何计算: ①先看索引上字段类型+长度。

70620

MySQL DQL 数据查询

4.WHERE 子句 如果给定 WHERE 子句,则指示行必须满足一个或多个条件才能被选中。where_condition 是一个表达式,对于要选择每一行,其计算结果为 true 才会被选择。...IN 用法 IN 在 WHERE句中用法主要有两种: IN 后面是查询产生记录集,注意,查询结果数据列只能有一列且无需给查询结果集添加别名。...但是,如果 SELECT 指定数据列,没有用于聚合函数不在 GROUP BY 子句中,按理说会报错,但是 MySQL 会选择第一条显示在结果集中。...WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算),而 HAVING 在分组和聚集之后选取分组。...当然,可以使用 HAVING 对结果集进行筛选,但不建议这样做,同样条件可以更有效地用于 WHERE 阶段。

19620

SQL高级知识:派生表

派生表与其他表一样出现在查询FROM子句中。...在这个例子中,使用嵌套派生表目的是为了重用列别名。但是,由于嵌套增加了代码复杂性,所以对于本例考虑使用方案一。 与查询区别 查询是指在主查询中使用内部查询。...通过将查询作为主查询条件或结果集来获取所需数据,查询可以出现在很多地方。 在where句中: ⼦查询结果可⽤作条件筛选时使值。...在from⼦句中: ⼦查询结果可充当⼀张表或视图,需要使⽤表别名。 在having⼦句中: ⼦查询结果可⽤作分组查询再次条件过滤时使值 在select⼦句中: ⼦查询结果可充当⼀个字段。...仅限⼦查询返回单⾏单列情况。 1、派生表通常出现在FROM子句后面。 2、派生表通常用于查询结果需要多次使用场景,而查询可以用于需要临时结果场景。

10210

MySQL-explain笔记

id值存在情况 查询id顺序递增:内层select语句一般会按顺序增长编号,对应于其在原始语句中位置。 id值为NULL:该行引用其他行并集结果。...每行都显示1:在语句中查询或关联查询,只有唯一select。 NULL是最后执行,如合并结果集等。 执行顺序 id相同,可以认为是一组,由上至下顺序执行。...位于form中查询,MySQL会将其结果存放在一个临时表中,即这里派生表。 MATERIALIZED 物化子查询,优化 FROM/IN 子句中查询。...任何随后需要结果时间里,MySQL都会再次引用临时表。 优化器可以使用哈希索引为表编制索引,以使查找快速、低成本。 索引包含唯一值,以消除重复项并使表更小。...:ID值n派生表结果,派生表可能是从FROM子句中一个查询生成(The row refers to the derived table result for the row

2.3K10

Mysql 大数据量高并发数据库优化

事实上,这样担心是不必要。SQL SERVER中有一个“查询分析优化器”,它可以计算where句中搜索条件并确定哪个索引能缩小表扫描搜索空间,也就是说,它能实现自动优化。...必要时强制查询优化器使用某个索引,如在 where句中使用参数,会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划选择推迟到运行时;它必须在编译时进行选择。...IF EXISTS (Select * FROM table_name Where column_name = 'xxx') 经常需要写一个T_SQL语句比较一个父结果集和结果集,从而找到是否存在在父结果集中有而在结果集中没有的记录...事实上,这样担心是不必要。SQL SERVER中有一个“查询分析优化器”,它可以计算where句中搜索条件并确定哪个索引能缩小表扫描搜索空间,也就是说,它能实现自动优化。...table_name Where column_name = 'xxx') 经常需要写一个T_SQL语句比较一个父结果集和结果集,从而找到是否存在在父结果集中有而在结果集中没有的记录,如:

1.3K51

数据库性能优化之SQL语句优化

where first_name ='Beill' and last_name ='Cliton'; (h) Order by语句 ORDER BY语句决定了Oracle如何将返回查询结果排序。...在这单表查询统计情况下,如果要过滤条件没有涉及到要计算字段,那它们结果是一样,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢如果要涉及到计算字 段,就表示在没计算之前...,这个字段值是不确定,根据上篇写工作流程,where作用时间是在计算之前就完成,而having就是在计算后才起作 用,所以在这种情况下,两者结果会不同。...(12) 减少对表查询: 在含有查询SQL语句中,要特别注意减少对表查询.例子: SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = (...一般可以考虑用EXIST替换, EXISTS 使查询更为迅速,因为RDBMS核心模块将在查询条件一旦满足后,立刻返回结果.

5.6K20
领券