SELECT * FROM t2,
(SELECT a FROM t1 WHERE b >= 'c') AS sq
WHERE t2.c=sq.a;
公用表表达式 (CTE)
WITH sq AS (SELECT a FROM t1 WHERE b >= 'c')
SELECT * FROM t2, sq WHERE t2.c=sq.a;
再次...
SELECT * FROM t2,
(SELECT a FROM t1 WHERE b >= 'c') AS sq
WHERE t2.c=sq.a;
WITH sq AS (SELECT a FROM t1 WHERE b >= 'c')
SELECT * FROM t2, sq WHERE t2.c=sq.a;
递归 CTE
WITHRECURSIVE ancestors AS (
SELECT * FROM folks WHERE name = 'Sergei'UNION ALLSELECT folks.* FROM folks, ancestors
WHERE folks.id = ancestors.father
OR folks.id = ancestors.mother
)
SELECT * FROM ancestors;
递归 CTE:阶乘
WITHRECURSIVE fact AS
(SELECT 1 AS n,1 AS `n!` UNION ALLSELECT n+1,`n!`*(n+1) FROM fact WHERE n < 20
) SELECT * FROM fact;
+----+---------------------+
| n | n! |
+----+---------------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 6 |
| 4 | 24 |
| 5 | 120 |
...
| 20 | 2432902008176640000 |
+----+---------------------+
递归 CTE:斐波那契
WITHRECURSIVE fib (a, b) AS
(SELECT 1, 1 UNION ALLSELECT b, a+b FROM fib WHERE b < 200000
) SELECT a FROM fib;
+--------+
| a |
+--------+
| 1 |
| 1 |
| 2 |
| 3 |
| 5 |
| 8 |
| 13 |
...
SELECT query_id, seq, AVG(duration) OVER
(ORDER BY query_id ROWSBETWEEN5PRECEDINGAND5FOLLOWING) x
FROM information_schema.profiling
WHERE state='end'ORDERBY query_id;
移除限制
临时表
10.2 之前:自连接
CREATE TEMPORARYTABLE employees (
id INTPRIMARY KEY,
name VARCHAR(100),
reports_to INT);
Query OK, 0 rows affected (0.00 sec)
INSERT employees VALUES (1, 'Rasmus', NULL), (2, 'Sergei', 1);
Query OK, 1 rows affected (0.00 sec)
SELECT e.name, m.name AS manager FROM employees e, employees m
WHERE e.reports_to=m.id;
ERROR 1137 (HY000): Can't reopen table: 'employees'
10.2 中的临时表
CREATETEMPORARYTABLE employees (
id INTPRIMARY KEY,
name VARCHAR(100),
reports_to INT);
INSERT employees VALUES (1, 'Rasmus', NULL), (2, 'Sergei', 1);
SELECT e.name, m.name AS manager FROM employees e, employees m
WHERE e.reports_to=m.id;
+--------+---------+
| name | manager |
+--------+---------+
| Sergei | Rasmus |
+--------+---------+
CREATETABLE t1 (a INTUNIQUE, b INT);
CREATETABLE t2 (a INTUNIQUE, b INT);
CREATEVIEW v1 ASSELECT a+b AS c FROM t1 WHERE a>2;
EXPLAINEXTENDEDSELECT * FROM v1, t2 WHERE a=c AND c<100;
+----+-------------+-------+------+..+------+..+------+----------+-----------------------+
| id | select_type | table | type | | key | | rows | filtered | Extra |
+----+-------------+-------+------+..+------+..+------+----------+-----------------------+
| 1 | SIMPLE | t1 | ALL | | NULL | | 1000 | 99.80 | Using where |
| 1 | SIMPLE | t2 | ref | | a | | 11 | 100.00 | Using index condition |
+----+-------------+-------+------+..+------+..+------+----------+-----------------------+
Note (Code 1003): select t1.a + t1.b AS c,t2.a,t2.b from t1 join t2
where t2.a = t1.a + t1.b and t1.a + t1.b < 100 and t1.a > 2
使用视图:无 MERGE 不好
CREATEVIEW v2 ASSELECT a+b AS c FROM t1 WHERE a > 2GROUP BY c;
EXPLAINEXTENDEDSELECT * FROM v2, t2 WHERE a=c AND c<100;
+----+-------------+------------+------+..+----------------------------------------------+
| id | select_type | table | type | | Extra |
+----+-------------+------------+------+..+----------------------------------------------+
| 1 | PRIMARY | t2 | ALL | | Using where |
| 1 | PRIMARY | <derived2> | ref | | Using where |
| 2 | DERIVED | t1 | ALL | | Using where; Using temporary; Using where; Using filesort |
+----+-------------+------------+------+..+----------------------------------------------+
3 rows in set, 1 warning (0.00 sec)
Note (Code 1003): select v2.c,t2.a,t2.b from v2 join t2 where
t2.a = v2.c and v2.c < 100
条件下推到不可合并的视图中
SET optimizer_switch='condition_pushdown_for_derived=on';
EXPLAINFORMAT=JSONSELECT * FROM v2, t2 WHERE a=c AND c<100;
...
"materialized": {
"query_block": {
"temporary_table": {
...
"attached_condition": "t1.a>2 and t1.a+t1.b<100"
}
}
}
...
复制
复制
回溯
read_binlog_speed_limit (binlog 读取速度限制)
延迟复制
binlog 中的压缩事件
性能
性能改进
快速连接
Power8 上的 CRC32
分区自动扩展表缓存
带优先级的线程池
非阻塞 ANALYZE TABLE
更快的 CHECKSUM TABLE
其他特性
新用户管理命令
CREATEUSER foo@bar REQUIRESSLWITHMAX_QUERIES_PER_HOUR10;
Query OK, 0 rows affected (0.00 sec)
ALTERUSER foo@bar IDENTIFIEDVIA pam WITHMAX_USER_CONNECTIONS3;
Query OK, 0 rows affected (0.00 sec)
SHOWCREATEUSER foo@bar;
+------------------------------------------------------------
| CREATE USER for foo@bar
+------------------------------------------------------------
| CREATE USER 'foo'@'bar' IDENTIFIED VIA pam REQUIRE SSL
WITH MAX_QUERIES_PER_HOUR 10 MAX_USER_CONNECTIONS 3
+------------------------------------------------------------