美文网首页
MySQL学习笔记 2022-03-31

MySQL学习笔记 2022-03-31

作者: DZQANN | 来源:发表于2022-03-30 21:23 被阅读0次

优化器

  1. MySQL8.0之后对Json进行比较时将不会进行隐式转换

    mysql> CREATE TABLE test (id INT, col JSON);
    
    mysql> INSERT INTO test VALUES (1, '{"val":true}'), (2, '{"val":false}');
    
    mysql> SELECT id, col, col->"$.val" FROM test WHERE col->"$.val" IS TRUE;
    +------+----------------+--------------+
    | id   | col            | col->"$.val" |
    +------+----------------+--------------+
    |    1 | {"val": true}  | true         |
    |    2 | {"val": false} | false        |
    +------+----------------+--------------+
    

    在之前只可能查出来第一行

    如果想要达到以前的效果就需要显示转换,这个是我们后面使用Json会碰到的一个坑

    mysql> SELECT id, col, col->"$.val" FROM test
        ->     WHERE JSON_VALUE(col, "$.val" RETURNING UNSIGNED) IS TRUE;
    +------+---------------+--------------+
    | id   | col           | col->"$.val" |
    +------+---------------+--------------+
    |    1 | {"val": true} | true         |
    +------+---------------+--------------+
    
  2. NOT IN和NOT EXISTS将会使用反链接(反连接就是连接上了表中没有与这行满足连接条件的所有行),会提高NOT IN和NOT EXISTS的查询速度

  3. DELETE和UPDATE可以有这种格式了:

    UPDATE t1 SET t1.a=value WHERE t1.a IN (SELECT t2.a FROM t2)
    
    ELETE FROM t1 WHERE t1.a IN (SELECT t2.a FROM t2)
    

    使用这种语法需要满足条件:

    • 具有[NOT] IN或者[NOT] EXISTS的子查询
    • 没有order by, limit
  4. 多表update支持"半一致"读操作,隔离级别低于REPEATABLE_READ

  5. 支持递归公共表达式,这个后面读到相关章节可以研究一下

  6. 窗口函数(像Excel一样)

  7. 横向派生表,简单来说就是from (子查询) a, b

    b可以直接和a进行关联

    SELECT
      salesperson.name,
      max_sale.amount,
      max_sale.customer_name
    FROM
      salesperson,
      -- find maximum size and customer at same time
      LATERAL
      (SELECT amount, customer_name
        FROM all_sales
        WHERE all_sales.salesperson_id = salesperson.id
        ORDER BY amount DESC LIMIT 1)
      AS max_sale;
    

    这个功能感觉还是挺强大的

相关文章

网友评论

      本文标题:MySQL学习笔记 2022-03-31

      本文链接:https://www.haomeiwen.com/subject/qstojrtx.html