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

数据库优化方案之SQL脚本优化

G:unique_subquery:用于wherein形式子查询,查询返回不重复唯一 H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,查询可能返回重复...I:using where:表示存储引擎返回记录并不是所有的都满足查询条件,需要在server层进行过滤。...using where: 服务器层对存储引擎返回数据进行了过滤 distinct: 优化distinct操作,查询到匹配数据后停止继续搜索 下面将会以下点进行展开讲解: 1.硬件 2.系统配置 3...3.应尽量避免在 where句中对字段进行 null 判断,否则将导致引擎放弃使用索引进行全扫描,如: select id from t where num is null 可以在num上设置默认...0,确保中num列没有null,然后这样查询: select id from t where num=0 4.应尽量避免在 where句中使用 or 来连接条件,否则将导致引擎放弃使用索引进行全扫描

1.4K30

MySQL 查询专题

NULL 与不匹配 在通过过滤选择出不具有特定行时,你可能希望返回具有 NULL 行。但是,不行。因为未知具有特殊含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。...事实上,目前为止所学过所有类型 WHERE子句都可以用 HAVING 来替代。唯一差别是,WHERE 过滤行, HAVING 过滤分组。...这可能会改变计算,从而影响 HAVING 子句中基于这些过滤分组。...这些问题不是理论问题,其答案取决于数据库设置方式。 limit 关键字 行0 检索出来第一行为行 0 不是行 1。因此,LIMIT 1, 1 将检索出第二行不是第一行。...例如,一个特殊词搜索将会返回包含该词所有行,不区分包含单个匹配行和包含多个匹配行(按照可能是更好匹配来排列它们)。类似,一个特殊词搜索将不会找出不包含该词但包含其他相关词行。

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

java面试(3)SQL优化

任何在Order by语句非索引项或者有计算表达式都将降低查询速度 应尽量避免在 where句中对字段进行 null 判断,否则将导致引擎放弃使用索引进行全扫描,如select id...至于in到底会不会走索引,这个众说纷纭,网上有一种说法:(1)A IN(列表)肯定用索引、(2)A in (查询) 是用不到索引,但是如果子查询条件是和外层相关查询本身用到索引。...但是第一种有个情况,就是如果一个列只有有限几种,那么A IN (列表)也是不会使用索引,因为这种情况,全扫描比走索引快,优化器会选择走全扫描。...任何地方都不要使用 select * from t ,用具体字段列表代替“*”,不要返回用不到任何字段。 尽量使用变量来代替临时。...order by子句:执行顺序从左到右 避免数据类型不一致 读取适当记录LIMIT M,N 避免在select句中使用查询 对于有联接列,即使最后联接为一个静态,优化器是不会使用索引

3.2K20

MySQL 系列教程之(七)DQL: select 开始丨【绽放吧!数据库

使用子句次序不对将产生错误消息 过 滤 数 据 WHERE 数据库一般包含大量数据,很少需要检索所有行。 通常只会根据特定操作或报告需要提取数据子集。...LIKE与通配符 前面介绍所有操作符都是针对已知进行过滤。 但是,这种过滤方法不是任何时候都好用。 例如,怎样搜索产品名中包含文本anvil所有产品?...找出表列(或所有行或某些特定行)最大、最小和平均值。 上述例子都需要对表中数据(不是实际数据本身)汇总。...这使我们能够对行进行计数,计算和与平均数,获得最大和最小不用检索所有数据 目前为止所有计算都是在所有数据或匹配特定WHERE子句数据上进行。...例如,可能想要列出至少有两个订单所有顾客。为得出这种数据,必须基于完整分组不是个别的行进行过滤 事实上,目前为止所学过所有类型WHERE子句都可以用HAVING来替代。

3.5K43

Oracle数据库增删改查

,查询什么就在SELECT 后面跟字段名称,比如DEMO中,让我们查询雇员编号、姓名、职位,这三个字段名就跟在SELECT 后面,职位不是销售人员则是过滤条件,放在WHERE 后面 SELECT EMPNO...eExpression1,eExpression2 如果eExpression1计算结果为null,则NVL()返回eExpression2.如果eExpression1计算结果不是null,...WHERE子句在GROUP BY 子句之前执行,不能在WHERE句中使用统计函数 HAVING子句在GROUP BY 子句之后执行,可以在HAVING子句中对统计函数进行过滤 查询 查询就是讲一个...WHERE查询就是在WHERE句中继续使用查询,就是讲一个查询结果放在WHERE句中再和另外一个字段进行过滤 DEMO:查询出低于平均工资雇员信息 HAVING子句是对分组统计函数进行过滤子句...条件,表示更新所有的记录,所以需要慎用 2、oracle中判断数据库为空,使用IS NULL,不为NULL是IS NOT NULL 3、同时更新多个字段时候需要把更新字段列表和查询出来字段列表顺序类型个数要保持一致

1.5K10

SQL必知必会总结2-第8到13章

本文是《SQL必知必会》一书精华总结,帮助读者快速入门SQL或者MySQL,主要内容包含: 数据库基础知识 库相关操作 检索数据方法 … 本文中介绍第8到13章,前面的章节请看SQL必知必会总结...可以对分组进行嵌套 GROUP BY子句中列出每一列都是检索列或者有效表达式(但是不能是聚集函数) 如果在SELECT中使用表达式,则必须在GROUP BY子句中使用相同表达式,不是使用别名 除了聚集函数外...子句之后,ORDER BY子句之前 GROUP BY子句中可以使用相对位置:GROUP BY 2, 1 表示先根据第二个列分组,再根据第一个列分组 过滤分组 在WHERE句中指定过滤是行不是分组;...对产生输出排序 对行分组,但输出可能不是分组顺序 任意列都可以使用(非选择列也可以使用) 只可能使用选择列或者表达式列,而且必须使用每个选择列表达式 不一定需要 如果和聚集函数一起使用列,则必须使用...WHERE prod_id = 'RGAN01')); 作为计算字段使用查询 使用查询另一个方法是创建计算字段 SELECT

2.3K21

MySQL 系列教程之(八)DQL:查询与连接

查询与连接 查询(嵌套sql) SELECT语句是SQL查询。迄今为止我们所看到所有SELECT语句都是简单查询,即从单个数据库中检索数据单条语句。...--最里边查询返回订单号列表,此列表用于其外面的查询WHERE子句。 --外面的查询返回客户ID列表,此客户ID列表用于最外层查询WHERE子句。 --最外层查询确实返回所需数据。...WHERE(通过匹配p1中vend_id和p2中vend_id)首先联结两个,然后按第二个prod_id过滤数据,返回所需数据 用自联结不用查询 自联结通常作为外部语句用来替代相同中检索数据时使用查询语句...--但对于更复杂过滤条件,或者多个不是单个)中检索数据情形,使用UNION可能会使处理更简单。 现在思考一个问题,上面的语句分别返回了几条数据?...第一条sql返回4行,第二条sql返回5行,那么union返回了几行? >UNION查询结果集中自动去除了重复行(换句话说,它行为与单条SELECT语句中使用多个WHERE子句条件一样)。

1.5K43

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

限制工作数据集大小 检查那些SELECT语句中用到,看看你是否可以应用WHERE子句进行过滤。一个典型例子是,当中只有几千行记录时,一个查询能够很好地执行。...但随着应用程序成长,查询慢了下来。解决方案或许非常简单,限制查询来查看当前月数据即可。 当你查询语句带有查询时,注意在查询内部语句上使用过滤不是在外部语句上。...通过移除与那些不必要JOINS操作,你减少了大量数据库必须执行流程。有时,就像移除列一样,你会发现你减少数据又通过数据库返回来了。...假设你有以下,它们通过定义OUTER JOINS来确保返回所有的数据: ? 解决办法是在customer行中增加一个占位符,并更新sales所有NULL到占位符。 ?...删除JOIN和WHERE句中计算字段 这是另外一个有时可能说起来容易做起来难技巧,它取决于你更改模式权限大小。可以将连接语句中用到计算字段作为一个新字段在中创建。

1.6K110

MySql操作-20211222

SELECT 之后是逗号分隔列或星号(*)列表,表示要返回所有列。 2. FROM 指定要查询数据或视图。 3. JOIN 根据某些连接条件其他中获取数据。 4....ORDER BY 指定用于排序列表。 8. LIMIT 限制返回数量。 语句中`SELECT`和`FROM`语句是必须,其他部分是可选。  ...>LIKE 匹配基于模式匹配。 >IN 指定是否匹配列表任何。 >IS NULL 检查该是否为NULL。...`;比查询都大   `select 展示列名 from where 列名 >ANY(select 对应列名 from ....)...`distinct` 实现查询不重复数据 DISTINCT 关键字主要作用就是对数据中一个或多个字段重复数据进行过滤,只返回其中一条数据给用户。

2.2K10

MySQL-Select语句高级应用

只有当所有条件都为true时,and才返回true。否则返回false或null or 逻辑或。只要有一个条件为true,or就返回true。否则返回false或null not 逻辑非。...【示例五】:where句中like USE world; SELECT * FROM city WHERE countrycode LIKE 'ch%';       sql说明: city中找到国家是一...它是SELECT语句中最后一个子句(在order by后面)。 它用来表示结果集中选取最前面或最后面的几行。 偏移量offset最小为0。...查询(inner  query)先执行,然后执行主查询(outer  query)   查询按对返回结果集调用方法,可分为:where查询,from型查询及exists型查询。...N 行 1列   查询(table subquery):返回结果集是 N 行 N 列   标量子查询(scalar subquery):返回1行1列一个 查询示例    创建数据 1

3.8K00

Oracle高级查询-imooc

:05)  4-8 [Oracle] 主查询和查询不是同一张 (05:40)  4-9 [Oracle] 查询排序问题 (09:09)  4-10 [Oracle] 主查询和查询执行顺序 (...注意:在select列表所有未包含在组函数中列都应该包含在GROUP BY子句中;包含在GROUP BY子句中列不必包含在SELECT列表中。...select列表中,未包含于组函数中列都必须包含在GROUP BY子句中。...deptno=10 group by deptno; 如果过滤条件中没有分组函数时,where与having通用,那么sql优化角度来讲,where效率更高,因为having是先分组再过滤where...,为两个都取别名 使用instr(a,b)函数,该函数含义为:如果字符串b在字符串a里面,则返回是b在a中位置,即返回大于0 需要用到分组查询 使用wm_concat(cols)函数对学生姓名用逗号拼接

2K40

《SQL必知必会》万字精华-第1到13章

SQL是一种专门和数据库沟通语言 SQL特点 1、SQL不是某个特定数据库供应商专有的语言,几乎所有的DBMS都是支持SQL 2、SQL简单易学。...七、创建计算字段 计算字段 存储在数据库字段一般不是应用程序中所需要格式。我们需要直接数据库中检索出来进行转换、计算或者格式化过数据。计算字段并不实际存在于数据库中。...) 如果在SELECT中使用表达式,则必须在GROUP BY子句中使用相同表达式,不是使用别名 除了聚集函数外,SELECT语句中每列都必须在GROUP BY子句中列出 如果分组中包含具有NULL...BY 2, 1 表示先根据第二个列分组,再根据第一个列分组 过滤分组 在WHERE句中指定过滤是行不是分组;实际上WHERE种并没有分组概念。...WHERE prod_id = 'RGAN01')); 作为计算字段使用查询 使用查询另一个方法是创建计算字段 SELECT

6.9K00

数据库设计和SQL基础语法】--连接与联接--多表查询与查询基础(二)

查询可以嵌套在 SELECT、FROM、WHERE 或 HAVING 子句中,用于数据库中检索数据或执行其他操作。查询通常返回一个结果集,该结果集可以被包含它主查询使用。...这样可以在较复杂查询中进行逻辑判断、过滤数据或进行计算。 类型: 查询可以分为单行查询和多行查询。单行查询返回一行一列结果,多行查询返回多行多列结果。...二、多表查询与查询结合运用 2.1 使用查询进行条件过滤 使用查询进行条件过滤是一种常见 SQL 操作,它允许你在 WHERE句中使用查询来过滤主查询结果。...主查询则使用这个列表过滤 products 产品信息,最终得到满足条件产品列表。 Tip:这只是一个简单例子,实际应用中可以根据具体业务需求进行更复杂条件过滤。...JOIN 操作: 通过连接两个来关联员工和部门平均工资信息。 查询: 在 WHERE句中使用查询来过滤结果。

24810

MySQL数据库、数据基本操作及查询数据

,字段名n] FROM 名; 查询指定记录 在 SELECT语句中,通过 WHERE子句可以对数据进行过滤。 SELECT 字段名1[,字段名2,......带 AND多条件查询 AND主要用于 WHERE句中,用来链接两个甚至多个查询条件,表示所有的条件都需要满足才会返回。...带 OR多条件查询 OR也主要用于 WHERE句中,用来链接两个甚至多个查询条件,表示所有的条件仅需满足其中之一项便会返回。...两个之间关系通过 (INNER) JOIN指定。 使用这种语法时候,连接条件使用 ON子句给出,不是WHERE。...带 ANY、SOME关键字查询 ANY和 SOME关键字是同义词,表示满足其中任一条件,它们允许创建一个表达式对子查询返回列表进行比较,只要满足内层查询中任何一个比较条件,就返回一个结果作为外层查询条件

3K20

SQL 语法速成手册

删除指定数据 DELETE FROM user WHERE username = 'robot'; 清空数据 TRUNCATE TABLE user; 查询数据 SELECT 语句用于数据库中查询数据...DISTINCT 用于返回唯一不同。它作用于所有列,也就是说所有都相同才算相同。 LIMIT 限制返回行数。可以有两个参数,第一个参数为起始行, 0 开始;第二个参数为返回总行数。...连接用于连接多个,使用 JOIN 关键字,并且条件语句使用 ON 不是 WHERE。 JOIN 保持基(结构和数据)不变。 JOIN 有两种连接类型:内连接和外连接。...内连接 vs 自然连接 内连接提供连接列,自然连接自动连接所有同名列。 外连接返回一个所有行,并且仅返回来自次中满足连接条件那些行,即两个列是相等。...WHERE 和 HAVING 可以在相同查询中。 HAVING vs WHERE WHERE 和 HAVING 都是用于过滤。 HAVING 适用于汇总组记录; WHERE 适用于单个记录。

17.1K40

SQL 语法速成手册

删除指定数据 DELETE FROM user WHERE username = 'robot'; 清空数据 TRUNCATE TABLE user; 查询数据 SELECT 语句用于数据库中查询数据...DISTINCT 用于返回唯一不同。它作用于所有列,也就是说所有都相同才算相同。 LIMIT 限制返回行数。可以有两个参数,第一个参数为起始行, 0 开始;第二个参数为返回总行数。...连接用于连接多个,使用 JOIN 关键字,并且条件语句使用 ON 不是 WHERE。 JOIN 保持基(结构和数据)不变。 JOIN 有两种连接类型:内连接和外连接。...内连接 vs 自然连接 内连接提供连接列,自然连接自动连接所有同名列。 外连接返回一个所有行,并且仅返回来自次中满足连接条件那些行,即两个列是相等。...WHERE 和 HAVING 可以在相同查询中。 HAVING vs WHERE WHERE 和 HAVING 都是用于过滤。 HAVING 适用于汇总组记录; WHERE 适用于单个记录。

16.8K20

MySQL 入门到实践,万字详解!

计算字段 有时候我们需要直接数据库中检索出转换、计算或格式化过数据,不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化,这时我们就需要计算字段了。...[要检索行数]; where 过滤没有分组概念,指定是行不是分组,针对分组过滤使用 having 子句。...where prod_id = 'TNT2')); 这里实际上有三条语句,最里边查询返回订单号列表,此列表用于其外面的查询 where 子句。...外面的查询返回顾客 ID 列表,此顾客 ID 列表用于最外层查询 where 子句。最外层查询最终返回所需数据。...自联结通常作为外部语句用来替代相同中检索数据时使用查询语句。虽然最终结果是相同,但有时候处理联结远比处理查询快得多。应该试一下两种方法,以确定哪一种性能更好。

1.9K30

【MySQL 系列】MySQL 语句篇_DQL 语句

也就是两个所有的行所有可能组合。 2.2.3、内连接(INNER JOIN JOIN) 内连接基于连接条件组合两个数据。内连接相当于加了过滤条件交叉连接。...使用括号更改计算顺序;⑦ WHERE句中 OR 连接两个比较条件,过滤那些至少满足其中一个比较条件记录行。...它不是空,也不是 0。 IS NULL 运算符用来测试一个不是 NULL,如果是 NULL 返回 1,否则返回 0。 IS NULL 是一个单目比较运算符,只需要一个操作数。...查询经常用在 WHERE句中。 例如,我前面提到操作符 EXISTS 就属于查询范畴。...此外,我们还可以将查询结果作为 IN 列表项以实现最终查询结果,这里需要注意在查询中返回结果必须是一个字段列表项。

11910

Oracle 数据库拾遗(四)

,而在具体应用中,查询往往需要返回多个,甚至是一个集合或一个,那么就需要能处理多行方法。...例如希望 student 中找出与学生姓名为”陈诚”在同一个班所有学生基本信息: SELECT * FROM student WHERE SDEPT IN ( SELECT SDEPT...事实上,此处返回结果仍然只有单行。 FROM 子句后查询 前面的实例中,查询都是出现在 WHERE 子句后,作为条件来过滤不需要记录行。事实上,查询也可以出现在 FROM 子句中。...SAGE > 20; 需要注意: 在 FROM 子句中查询代替作为查询对象时,如果其后还包含 WHERE 子句,那么 WHERE句中组成条件一定要是查询能够返回,否则语句执行将出现错误...注意: 在 SELECT 子句中查询作为返回列名时,查询中一定要保证返回只有一个,否则语句执行将出现错误。

1.1K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券