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

MySQL调优系列——MySQL常用的优化技巧

SQL优化原因: 性能低、执行时间太长、等待时间太长、SQL语句欠佳(连接查询)、索引失效、服务器参数设置不合理(缓冲、线程数) system>const>eq_ref>ref>range>index...五、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)...这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。 如果该列是NULL,则没有相关的索引。...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中 如果没有选择索引,键是NULL...=’女’ 更新非常频繁的字段不适合创建索引    select * from order_copy where order_state=’未付款’ 不会出现在WHERE子句中字段不该创建索引

1.8K20

MySQL(五)汇总和分组数据

vend_id为1003的产品,avg_price中返回该供应商的产品的平均值; PS:avg()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出,为了获得多个列的平均值,必须使用多个avg...max()用来返回任意列中的最大值,包括返回文本列的最大值;但用于文本数据时,如果数据按相应的列排序,则max()返回最后一行(max()函数忽略列值为null的行) 4、min()函数 min()返回指定列的最小值...列最小值; PS:MySQL允许min()用来返回任意列中的最小值,包括返回文本列的最小值;但用于文本数据时,如果数据按相应的列排序,则min()返回最前面的行(min()函数忽略列值为null的行)...(sum()函数忽略列值为null的行) 6、distinct与聚集函数 MySQL5.0.3以及之后的版本,聚集函数和distinct可以搭配使用,比如: ①对所有的行执行计算,指定all参数或不给参数...如果分组列中具有null值,则null将作为一个分组返回(如果列中有多行null值,他们将分为一组); ⑥group by子句必须出现在where子句之后,order by子句之前; PS:使用with

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

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

    (*):不管是空值(NULL)还是非空值,都会统计进去 count(column):对特定的列进行计数,会忽略表该列的NULL值 SELECT COUNT(*) AS num_cust FROM Customers...,则COUNT()函数会忽略指定列的值为空的行,但是如果COUNT()函数使用的是星号,则不会忽略 3、MAX()/MIN()函数 返回指定列中的最大值或者最小值 SELECT MAX(prod_price...WHERE order_num = 20005; 笔记:SUM()函数会自动忽略值为NULL的行 聚集不同值 上面的5个聚集函数都可以如下使用: 对所有的行执行计算,指定ALL参数或不指定参数(...,可以对分组进行嵌套 GROUP BY子句中列出的每一列都是检索列或者有效的表达式(但是不能是聚集函数) 如果在SELECT中使用表达式,则必须在GROUP BY子句中使用相同的表达式,而不是使用别名...除了聚集函数外,SELECT语句中的每列都必须在GROUP BY子句中列出 如果分组中包含具有NULL的行,则NULL将作为一个分组返回;如果列中出现多个NULL,它们将分成一个组 GROUP BY子句必须在

    2.3K21

    Hive3查询基础知识

    DELETE FROM tablename [WHERE expression]; 如果gpa列的值为1或0,请从学生表中删除所有数据行。...外部查询是包含内部子查询的主要查询。WHERE子句中的子查询包含查询谓词和谓词运算符。谓词是计算为布尔值的条件。子查询中的谓词还必须包含谓词运算符。谓词运算符指定在谓词查询中测试的关系。...如果us_census表的至少一行中的年值与transfer_payments表中的年值匹配,则谓词对于transfer_payments表中的一行返回true。...子查询限制 为了有效地构造查询,您必须了解WHERE子句中的子查询的限制。 • 子查询必须出现在表达式的右侧。 • 不支持嵌套子查询。 • 单个查询只能有一个子查询表达式。...您已在hive-site.xml文件中将以下参数设置为column,以启用带引号的标识符: 在hive-site.xml 文件中将hive.support.quoted.identifiers 配置参数设置为

    4.7K20

    mysql优化概述

    MySQL参数设置 通用配置 max_connections : MySQL能创建的最大连接数,如果数据库的并发量比较大,建议调高此值,以增加并行连接数量,当然连接数越多,由于MySQL会为每个连接创建连接缓冲区...select_type的属性,代表着这个小查询在整个大查询中的查询类型,select_type的取值为: 名称 描述 SIMPLE 查询语句中不包含UNION或者子查询 PRIMARY 对于包含UNION...unique_subquery: 类似于两表连接中被驱动表的eq_ref访问方法,unique_subquery是针对在一些包含IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS子查询...,那么该列实际占用的最大存储空间就是100 × 3 = 300个字节 如果该索引列可以存储NULL值,则key_len比不可以存储NULL值时多1个字节 对于变长字段来说,都会有2个字节的空间来存储该变长列的实际长度...Using where : 使用全表扫描来执行对某个表的查询,并且该语句的WHERE子句中有针对该表的搜索条件 Using filesort: 排序操作无法使用到索引,只能在内存中(记录较少的时候)或者磁盘中

    46510

    mysql优化概述

    MySQL参数设置 通用配置 max_connections : MySQL能创建的最大连接数,如果数据库的并发量比较大,建议调高此值,以增加并行连接数量,当然连接数越多,由于MySQL会为每个连接创建连接缓冲区...select_type的属性,代表着这个小查询在整个大查询中的查询类型,select_type的取值为: 名称 描述 SIMPLE 查询语句中不包含UNION或者子查询 PRIMARY 对于包含UNION...unique_subquery: 类似于两表连接中被驱动表的eq_ref访问方法,unique_subquery是针对在一些包含IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS子查询...,那么该列实际占用的最大存储空间就是100 × 3 = 300个字节 如果该索引列可以存储NULL值,则key_len比不可以存储NULL值时多1个字节 对于变长字段来说,都会有2个字节的空间来存储该变长列的实际长度...Using where : 使用全表扫描来执行对某个表的查询,并且该语句的WHERE子句中有针对该表的搜索条件 Using filesort: 排序操作无法使用到索引,只能在内存中(记录较少的时候)或者磁盘中

    55120

    hhdb数据库介绍(9-26)

    如果数据节点初始化失败且无可用逻辑库,或数据节点下无存储节点,则计算节点无法启动。...--子查询中最大not in个数 -->参数作用:控制子查询中最大NOT IN个数,默认20000,当执行的SQL语句中NOT IN子查询为分片表且带有聚合函数,此时去重后的NOT IN个数超过默认值20000...:单机房内复制延迟超过该参数设置的值开始读其他可用从机或主机(先读其他可用从机,无可用从机时读主机),灾备模式下的灾备机房,复制延迟超过该参数设置的值开始拒绝读取。...-->参数作用:缓存需要输出日志的SQL场景,可通过该参数设置需要输出SQL的条数,方便问题排查定位。目前主要的场景有:事务异常、死锁检测、watchdog等。.../2)+1),且在该参数超时前都未选举成功,则该计算节点自动下线,不再发起选举,默认0,不开启此机制。

    6710

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

    6 空值 空值给包括算数运算、比较运算和集合运算在内的关系运算带来了特殊的问题。 比如,如果算术表达式的任一输入值为空,则该算术表达式(如+,-,*,/)结果为空。 对比较运算,这也是一个问题。...group by子句中的属性,如果出现在select子句中,它只能作为聚集函数的参数。...7.4 对空值和布尔值的聚集 考虑如下查询: select sum(salary) from instructor; 如果有教师的薪资是null,SQL将忽略其值。...在包含了子查询的查询中,在相关名称上可以应用作用域规则,根据此规则,在一个子查询中只能使用此子查询本身定义的,或者包含此子查询的任何查询中定义的相关名称,如果一个相关名称既在子查询中局部定义,有在包含该子查询的查询中全局定义...8.5 from子句中的子查询 前面的子查询都是在where子句中使用的,下面介绍在from子句中使用子查询。

    3.5K31

    mybatis的常用动态sql标签

    : id:该 resultMap 的标志 type:返回值的类名,此例中返回 Studnet 类 子标签: id:用于设置主键字段与领域模型属性的映射关系,此处主键为 ID,对应 id。...动态 sql 拼接 if 标签 if 标签通常用于 WHERE 语句、UPDATE 语句、INSERT 语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值...= '' "> AND hobby = #{hobby} 当 name 值为 null 时,查询语句会出现 “WHERE AND” 的情况,解决该情况除了将...这个“where”标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以 AND 或 OR 开头的,则它会剔除掉。...当在 update 语句中使用 if 标签时,如果最后的 if 没有执行,则或导致逗号多余错误。使用 set 标签可以将动态的配置 set 关键字,和剔除追加到条件末尾的任何不相关的逗号。

    2K10

    mybatis常用标签,详细总结

    : 主标签: id:该resultMap的标志 type: 返回值的类名,此例中返回Studnet类 子标签: id:用于设置主键字段与领域模型属性的映射关系,此处主键为ID,对应id。...MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。...这个“where”标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。...,如果有一个参数为null,都会导致错误。...当在update语句中使用if标签时,如果最后的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置set关键字,和剔除追加到条件末尾的任何不相关的逗号。

    2.2K30

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

    如果表中的列可以作为主键,则它必须满足: 任意两行都不具有相同的主键值(主键列不允许NULL值) 每行都必须有一个主键值 主键列中的值不允许修改或者更新 主键值不能重用(如果某行从表中删除,则它的主键不能赋给以后的行记录...-- 找出价格为NULL的数据 五、高级数据过滤 本节中介绍的是如何组合WHERE子句以建立功能更强、更高级的搜索条件 组合WHERE子句 操作符operator:用来联结或改变WHERE子句中的子句的关键字...()函数会忽略指定列的值为空的行,但是如果COUNT()函数使用的是星号,则不会忽略 3、MAX()/MIN()函数 返回指定列中的最大值或者最小值 SELECT MAX(prod_price) AS...WHERE order_num = 20005; 笔记:SUM()函数会自动忽略值为NULL的行 聚集不同值 上面的5个聚集函数都可以如下使用: 对所有的行执行计算,指定ALL参数或不指定参数(因为ALL...,SELECT语句中的每列都必须在GROUP BY子句中列出 如果分组中包含具有NULL的行,则NULL将作为一个分组返回;如果列中出现多个NULL,它们将分成一个组 GROUP BY子句必须在WHERE

    7.1K00

    Mysql学习笔记,持续记录

    如果在 select 中使用表达式,则必须在 group by 子句中指定相同的表达式。不能使用别名。 除聚集计算语句外,select 语句中的每个列都必须在 group by 子句中给出。...如果分组列中具有 NULL 值,则 NULL 将作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。 group by 子句必须出现在 where 子句之后,order by 子句之前。...一个字符串列表就是一个由一些被 ‘,' 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。...如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,')时将无法正常运行。 5....如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。

    1.2K50

    MySQL 子查询

    ALL 必须跟在比较运算符之后,如果表达式与子查询返回列中的所有值的比较结果为 TRUE,则返回 TRUE。...ANY 关键字必须跟在比较运算符之后,如果表达式与子查询返回列中的任何值的比较结果为 TRUE,则返回 TRUE。...5.EXISTS 和 NOT EXISTS 如果子查询返回任何行,则 EXISTS 子查询为 TRUE,NOT EXISTS 子查询为 FALSE。...MySQL 会忽略此类子查询中的 SELECT 列表,因此没有区别。 对于前面的示例,如果 t2 包含任何行,甚至只包含 NULL 值的行,则 EXISTS 条件为 TRUE。...如果部门 ID 不同(即进入了新的部门),则排名 (@rn) 被重置为 1,表示这是新部门的第一个员工。AS rn 表示将计算出的排名别名为 rn,它将作为结果集的一部分返回。

    25910

    MySQL DQL 子查询

    ALL 必须跟在比较运算符之后,如果表达式与子查询返回列中的所有值的比较结果为 TRUE,则返回 TRUE。...ANY 关键字必须跟在比较运算符之后,如果表达式与子查询返回列中的任何值的比较结果为 TRUE,则返回 TRUE。...5.EXISTS 和 NOT EXISTS 如果子查询返回任何行,则 EXISTS 子查询为 TRUE,NOT EXISTS 子查询为 FALSE。...MySQL 会忽略此类子查询中的 SELECT 列表,因此没有区别。 对于前面的示例,如果 t2 包含任何行,甚至只包含 NULL 值的行,则 EXISTS 条件为 TRUE。...如果部门 ID 不同(即进入了新的部门),则排名 (@rn) 被重置为 1,表示这是新部门的第一个员工。AS rn 表示将计算出的排名别名为 rn,它将作为结果集的一部分返回。

    8600

    hhdb数据库介绍(9-15)

    假设分片表customer分片字段为provinceid,则下列语句为单库SELECT,因为该条语句只会在provinceid=1所路由的那个节点上运行:SELECT * FROM customer WHERE...SET支持分片表无拆分字段值不支持分片表拆分字段值为NULL支持需要在分片函数参数中配置NULL值参数子表无关联字段值不支持子表数据的INSERT操作必须满足外键条件子表关联字段值为NULL不支持子表数据的...id 列1、2 值路由到同一个节点,则第2条SQL 会忽略,若不是同一节点,则第2条会插入成功。...当开启表全局唯一约束时,插入第2条时,如果id 列1、2 值路由到同一个节点,则第2条SQL 会忽略,若不是同一节点,则第2条SQL也会忽略。...当设置参数0时,只允许删除空库,若库中有表则删除库失败。

    5210

    Mysql优化-索引

    按照主键B+树的排列方式存放,子节点存放的就是数据。 如果没有主键,以第一列为聚集索引. 只有一个聚集索引。 普通索引指向聚集索引。 非聚集索引: 属于MyIsam。...如果是,则可以建立复合索引;否则考虑单字段索引; 如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引; 如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段...,所以id字段为nullF:subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subqueryG:dependent subquery:与dependent union类似...,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的就表示这个是临时表,后边的N就是执行计划中的id,表示结果来自于这个查询产生。...如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句。

    1.3K50

    SQL常见面试题总结

    join 左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL). select * from student left join course...on student.ID=course.ID -- 右连接 右外连接包含right join右表所有行,如果左表中某行在右表没有匹配,则结果中对应左表的部分全部为空(NULL)。...null 的记录 count(1)指的并不是计算1的个数,而是指表的第一个字段 用count对字段为null的数据可以查出来吗 不可以 对于返回的结果集,一行行地判断,如果 count 函数的参数不是...,不会忽略列值为NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者...并且如果当前使用组合索引时,某字段采用了范围查询,就会导致该字段后面的索引失效。

    2.3K30

    ​MySQL中explain的结果字段介绍(1)

    如果上面的语句中使用了union all的语法,那么就不会出现第三3行的结果,因为union all的过程中,不会对结果集进行去重,所以也就不会使用那个临时表。...union:一般联合查询最右面的SQL语句 union result:保存union的结果的临时表SQL subquery:子查询语句如果不能转化成连接查询,并且最里面的子查询如果被物化(物化就是通过将子查询的结果作为一个临时表来加快查询结果...,正常来讲,这个表是保存在内存中的),则这个select_type就是subquery,这个我们给出例子: mysql> EXPLAIN SELECT * FROM test2 WHERE id IN...,选择将子查询物化之后与外层查询进行连接查询时,该子查询对应的select_type属性就是MATERIALIZED 03 table 表的名称,这个比较容易理解。...04 partitions 分区信息,一般为null,这个可以暂时忽略。 时间关系,先这样吧,后面的几个字段以及示例明天再写吧。

    2.8K20

    SQL聚合函数 STDDEV, STDDEV_SAMP, STDDEV_POP

    如果未指定关键字,则这是默认值。 DISTINCT - 可选-指定标准偏差函数返回不同(唯一)表达式值的标准偏差的DISTINCT子句。...除非表达式的数据类型为DOUBLE,否则这些函数将返回数字数据类型。如果表达式为DOUBLE,则返回DOUBLE。 描述 这三个标准差聚合函数在丢弃NULL值后返回表达式值分布的统计标准差。...这些标准差函数可以在引用表或视图的SELECT查询或子查询中使用。 它们可以在SELECT列表或HAVING子句中与普通字段值一起出现。 这些标准偏差函数不能在WHERE子句中使用。...它们不能在JOIN的ON子句中使用,除非SELECT是子查询。...它们将非数值值(包括空字符串("))计算为零(0)。 这些标准偏差函数会忽略数据字段中的NULL值。 如果查询没有返回行,或者返回的所有行的数据字段值为NULL,则返回NULL。

    1.2K20

    MyBatis——动态SQL总结

    此时我们使用if动态sql语句先进行判断,如果值为null或等于空字符串,我们就不进行此条件的判断,增加灵活性。...if + set 更新语句 当update语句中没有使用if标签时,如果有一个参数为null,都会导致错误。...当在update语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。...如果set包含的内容为空的话则会出错。 使用if+set标签修改后,如果某项为null则不进行更新,而是保持数据库原值。...如果传入的是单参数且参数类型是一个List的时候,collection属性值为list 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array 如果传入的参数是多个的时候

    69010
    领券