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

谈谈MYSQL中的Explain

Explain结果与MySQL版本有很大的关系,不同版本的优化器的优化策略不同。...匹配的分区信息(对于非分区表值为NULL)select_type连接操作的类型possible_keys可能用到的索引keykey列显示MySQL实际决定使用的键(索引),必然包含在possible_keys...如果没有使用索引,则该列是 NULL。如果想强制mysql使用或忽视possible_keys列中的索引,在查询中使用 force index、ignore index。...key_len这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...extra该列包含MySQL解决查询的详细信息,有以下几种情况:Using where: 不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql

26521

MySQL 之 JSON 支持(一)—— JSON 数据类型

如果值有效,则返回值的 JSON 类型,否则会产生错误: mysql> SELECT JSON_TYPE('["a", "b", 1]'); +----------------------------+...如果路径未选择数组值,则 path[0] 的计算结果与 path 相同: mysql> SELECT JSON_SET('"x"', '$[0]', 'a'); +------------------...还支持数组元素的相对地址。如果 path 没有选择数组值,则 path[last] 的计算结果与 path 的值相同,如本节稍后所示(参见“最右边的数组元素”)。...,则评估结果与将该值封装在单个元素数组中时的结果相同: mysql> SELECT JSON_REPLACE('"Sakila"', '$[last]', 10); +-----------------...返回值是原始文档减去文档中存在的路径所选的值: mysql> SELECT JSON_REMOVE(@j, '$[2]', '$[1].b[1]', '$[1].b[1]'); +-----------

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

    【重学 MySQL】十七、比较运算符的使用

    等于(=) 在MySQL中,等号运算符(=)用于比较两个值是否相等。如果两边的值相等,则表达式的结果为TRUE;否则,结果为FALSE。...MySQL中的等号运算符还可以与其他运算符(如逻辑运算符)结合使用,以构建更复杂的查询条件。 结论 等号运算符(=)在MySQL中用于比较两个值是否相等,是SQL查询语句中非常基础且重要的一个部分。...在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。...在这种情况下,考虑使用其他查询策略,如连接(JOINs)或临时表。 LIKE 在MySQL中,LIKE操作符用于在WHERE子句中搜索列中的指定模式。...如果需要在模式中包含这些字符作为文字字符,你可能需要使用ESCAPE子句来指定一个转义字符。 使用通配符进行搜索时,MySQL会扫描表中的每一行,并检查列值是否与模式匹配。

    20010

    mysql中find_in_set()函数的使用

    ”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N...如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。...总结:like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。...”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N...如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

    3.7K40

    MySQL 之 JSON 支持(三)—— JSON 函数

    若要检查路径中的特定值,改用 JSON_CONTAINS()。 如果文档中不存在指定的路径,则返回值为 0。...返回 JSON 文档中的数据,该数据是从路径参数匹配的文档部分中选择的。如果任何参数为 NULL 或在文档路径中没有找到值,则返回 NULL。...如果这些参数可能返回多个值,则匹配的值将自动封装为数组,顺序与生成它们的路径相对应。否则,返回值为单个匹配值。...如果顶级值具有嵌套的子对象,则返回值不包括这些子对象的键。...的相同,但有以下两个区别: 如果与第二个对象中的键关联的值不是 JSON null,则 JSON_MERGE_PATCH() 将删除第一个对象中具有相同键的任何成员。

    79110

    Mysql学习笔记,持续记录

    如果分组列中具有 NULL 值,则 NULL 将作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。 group by 子句必须出现在 where 子句之后,order by 子句之前。...因为只匹配一行数据,所以很快。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。 eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。...中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。...如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,')时将无法正常运行。 5....中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中 STRICT_TRANS_TABLES:严格模式,在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作

    1.2K50

    【mysql】比较运算符

    在使用等号运算符时,遵循如下规则: 如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。...如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。...;当参数为字符串时,返回字母表中顺序最靠前的字符;当比较值列表中有NULL时,不能判断大小,返回值为NULL。...假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。...IN运算符 IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。

    2.5K30

    MySQL执行计划(explain)分析

    查询中包含任何子查询,那么最外层的查询则被标记为PRIMARY SUBQUERY:SELECT列表中的子查询 DEPENDENT SUBQUERY:依赖外部结果的子查询 UNION:UNION操作的第二个或是之后的查询的值为...如对主键或是唯一索引的查询,效率最高的联接方式 eqref: 唯一索引或主键查找,对于每个索引键,表中只有一条记录与之匹配 ref:非唯一索引查找,返回匹配某个单独值的所有行。...查询列所涉及到的列上的索引都会被列出,但不一定会被使用 KEY列 查询优化器优化查询实际所使用的索引 如果没有可用的索引,则显示为NULL 如查询使用了覆盖索引,则该索引仅出现在Key列中 KEY_LEN...列 表示索引字段的最大可能长度 长度由字段定义计算而来,并非数据的实际长度 REF列 表示哪些列或常量被用于查找索引列上的值 ROWS列 表示MySQL通过索引统计信息,估算的所需读取的行数 ROWS值的大小是个统计抽样结果...CREATE INDEX idx_productID_auditStatus ON product_comment(product_id,audit_status) 如何删除重复数据 业务场景:删除评论表中对同一订单同一商品的重复评论

    95840

    配置查询与线程追踪函数|全方位认识 sys 系统库

    表中的enabled字段值设置 如果指定的consumers名称无效,则返回NULL 参数: in_consumer VARCHAR(64):要检查是否启用的consumers名称字符串 返回值:一个ENUM...对应performance_schema.threads表中的PROCESSLIST_ID列值或SHOW PROCESSLIST输出的Id列值 返回值:一个ENUM('YES','NO','UNKNOWN...返回该内部线程ID相关联的account名称,该值与performance_schema.threads表中的thread_id列值对应 返回值:一个TEXT文本值 函数定义语句文本 DROP FUNCTION...对应performance_schema.threads表中的PROCESSLIST_ID列或SHOW PROCESSLIST输出的Id列值 返回值:一个BIGINT UNSIGNED值 函数定义语句文本...VARCHAR(128):给定的配置选项名称字符串 in_default_value VARCHAR(128):如果在sys_config表中找不到给定的配置选项名称,则返回该参数给定的值 返回值:一个

    1.9K30

    数据库之运算符详解

    例: mysql> create table tab1(num int); # 创建一列的表 mysql> insert into tab1 values(64);...二、比较运算符 select语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录时符合条件的,比较结果为真,则返回1,为假则返回0,比较结果不确定则返回NULL。 ?...1、等于运算符 等于运算符用来判断数字、字符串和表达式是否相等,如果相等,则返回值为1,否则返回值为0,如果有一个值是NULL,则比较结果是NULL。...7、IN、NOT IN IN :判断一个值是否是 IN 列表中的任意一个值; NOT IN :判断一个值是否不是 IN 列表中的任意一个值。...关于上述的返回值解释:SQL语句是将5和进行位取反的数字1进行位与运算(&),位于运算的原则是对应的二进制位都位1,则该位为1,否则为0,5的二进制数为0101,1的二进制数为0001,1进行位取反后的值就是

    1.7K20

    SQL注入绕过的简单总结

    (NULL 不计入): COUNT() 函数返回表中的记录数: ASCII(str) 返回值为字符串str 的最左字符的ASCII值。...假如str为空字符串,则返回值为 0 。 ORD(char) 返回字符的 ASCII 值 GROUP_CONCAT(expr) 该函数返回带有来自一个组的连接的非NULL值的字符串结果。...假如str 的长度大于len, 则返回值被缩短至 len 字符。 RPAD(str,len,padstr)返回字符串str, 其右边被字符串padstr填补至len字符长度。...假如字符串str 的长度大于len,则返回值被缩短到与len 字符相同长度。 sleep(duration) 睡眠(暂停) 时间为duration 参数给定的秒数,然后返回 0。...反引号 用于区分MYSQL的保留字与普通字符而引入的符号,如: SELECT`select`from`test`WHERE`select`='字段值';#未使用空格,是一种绕过方式 不等于 !

    1.9K10

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

    如果字段值满足指定的范围查询条件,则这些记录被返回。 同样,在BETWEEN AND关键字前面加上 NOT即可使得查询的结果正好相反。...查询结果不重复 在 SELECT语句中,使用 DISTINCT关键字来指示MySQL消除重复的记录。...) 返回某列的最小值 SUM() 返回某列值的和 连接查询 内连接查询 在内连接查询中,只有满足条件的记录才能出现在结果关系中。...带 ANY、SOME关键字的子查询 ANY和 SOME关键字是同义词,表示满足其中任一条件,它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件...当外层查询语句内只要有一个内层查询语句返回的数据列中的数据时,则判断为满足条件,外层查询语句将进行查询。 带比较运算符的子查询 子查询可以使用如 '','>=','!

    3.1K20

    MySQL 索引的类型

    【2】匹配最左前缀:前面提到的索引可用于查找所有姓为 Allen 的人,即只使用索引的第一列。 【3】匹配列前缀:也可以只匹配某一列的值的开头部分。...如果多个列的哈希值相同,索引会以链表的方式存放多个记录指针到同一个哈希条目中。...SELECT id FROM url WHERE url="http://www.mysql.com" AND url_crc=CRC32("http://www.mysql.com"); 上述的缺点是需要维护哈希值...一个简单的办法可以使用 MD5() 函数返回值的一部分作为自定义哈希函数。这可能比自己写一个哈希算法的性能要差。...必须使用 MySQL 的 GIS 相关函数如 MBRCONTAINS() 等来维护数据。MySQL 的 GIS 支持并不完善,所以大部分人都不会使用这个特性。

    1.4K30

    事件记录 | performance_schema全方位介绍

    statements_digest配置行没有开启,则语句事件中该列值为NULL。...如果不是嵌套语句或者是父语句本身产生的事件,则这些列值为NULL OBJECT_INSTANCE_BEGIN:语句的唯一标识,该列值是内存中对象的地址  MYSQL_ERRNO:语句执行的错误号,此值来自代码区域的语句诊断区域...即WHERE子句匹配到的行数  对于REPLACE语句,如果发生新旧行替换操作,则受影响的行值为2,因为在这种情况下,实际上是先删除旧值,后插入新值两个行操作  对于INSERT … ON DUPLICATE...where子句匹配的记录,如果返回-1则表示语句返回了错误  * 3)、对于SELECT语句:row_count()函数返回-1,例如:SELECT * FROM t1语句,ROW_COUNT()返回-...()函数返回0  * 5)、因为mysql_affected_rows()返回的是一个无符号值,所以row_count()函数返回值小于等于0时都转换为0值返回或者不返回给effected值,row_count

    2.9K120

    MySQL8.0 JSON函数之搜索JSON值(五)

    如果json_doc参数不是有效的JSON文档,任何path 参数不是有效的路径表达式,或者 one_or_all不是 ‘one’或,都会发生错误’all’。 如果文档中没有指定的路径,则返回值为0。...返回值由path参数匹配的所有值组成 。如果这些参数有可能返回多个值,则匹配的值将按照与生成它们的路径相对应的顺序自动包装为一个数组。否则,返回值是单个匹配值。...如果在目标JSON文档中找不到匹配的键,则使用->的表达式将计算为NULL,如下所示: mysql>SELECT * FROM tj10 WHERE a->"$[4][1]" IS NOT NULL;...JSON对象的顶级值中的键,如果给定了path参数,则返回所选路径中的顶级键。...如果顶级值具有嵌套的子对象,则返回值不包括来自这些子对象的键。

    7.7K51

    MySQL数据库学习,详解select条件查询(二)

    语法: select 列名 from 表名 where 列 like pattern; pattern中可以包含通配符,有以下通配符: %:表⽰匹配任意⼀个或多个字符 _:表⽰匹配任意⼀个字符。...select 列名 from 表名 where 字段 in (值1,值2,值3,值4); in 后⾯括号中可以包含多个值,对应记录的字段满⾜in中任意⼀个都会被返回 in列表的值类型必须⼀致或兼容 in...select 列名 from 表名 where 字段 not in (值1,值2,值3,值4); 如查询年龄不在10、15、20、30之内的,如下: mysql> select * from test6...IS NULL(返回值为空的记录) select 列名 from 表名 where 列 is null; 查询指定的列的值为NULL的记录。...列名 from 表名 where 列 is not null; 查询指定的列的值不为NULL的记录。

    1.2K10

    Mysql系列第七讲 玩转select条件查询,避免采坑

    (NULL值专用查询) IS NULL(返回值为空的记录) IS NOT NULL(返回值不为空的记录) (安全等于) 经典面试题 条件查询 语法: select 列名 from 表名 where...语法: select 列名 from 表名 where 列 like pattern; pattern中可以包含通配符,有以下通配符: %:表示匹配任意一个或多个字符 _:表示匹配任意一个字符...select 列名 from 表名 where 字段 in (值1,值2,值3,值4); in 后面括号中可以包含多个值,对应记录的字段满足in中任意一个都会被返回 in列表的值类型必须一致或兼容 in...select 列名 from 表名 where 字段 not in (值1,值2,值3,值4); 如查询年龄不在10、15、20、30之内的,如下: mysql> select * from test6...IS NULL(返回值为空的记录) select 列名 from 表名 where 列 is null; 查询指定的列的值为NULL的记录。

    1.5K30

    MYSQL EXPLAIN结果详解

    1 id select的识别符,这是select的查询序列号。 如果有两列数据id相同,则为同一组查询,由上到下执行。 如果id值不同,id值越大,优先级越高。...如将主键置于where列表中,MySQL就能将该查询转换为一个常量。当查询的表只有一行的情况下,使用system。 const:表最多有一个匹配行,它将在查询开始时被读取。...这可能是最好的联接类型,除了const类型。 ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。...( 列与索引的比较,表示上述表的连接匹配条件。) 10 rows MySQL认为它执行查询时必须检查的行数既预估扫描的行数。 11 filtered 通过表条件过滤出的行数的百分比估计值。...Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤。

    2.6K30
    领券