MySQL 8 -- Yorkshire PHP April 8th, 2017
-
Upload
dave-stokes -
Category
Internet
-
view
75 -
download
2
Transcript of MySQL 8 -- Yorkshire PHP April 8th, 2017
![Page 1: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/1.jpg)
MySQL 8Dave StokesMySQL Community [email protected] @StokerSlides -> https://slideshare.net/davidmstokesBlog -> https://elephantanddolphin.blogger.com
![Page 2: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/2.jpg)
Safe Harbour Agreement
THE FOLLOWING IS INTENDED TO OUTLINE OUR GENERAL PRODUCT DIRECTION. IT IS INTENDED FOR INFORMATION PURPOSES ONLY, AND MAY NOT BE INCORPORATED INTO ANY CONTRACT. IT IS NOT A COMMITMENT TO DELIVER ANY MATERIAL, CODE, OR FUNCTIONALITY, AND SHOULD NOT BE RELIED UPON IN MAKING PURCHASING DECISIONS. THE DEVELOPMENT, RELEASE, AND TIMING OF ANY FEATURES OR FUNCTIONALITY DESCRIBED FOR ORACLE'S PRODUCTS REMAINS AT THE SOLE DISCRETION OF ORACLE.
2
![Page 3: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/3.jpg)
MySQL News
21 years old! Oracle owned for seven years!
MySQL 5.7 current GA releaseJSON Data Type
Enhanced Security, Encryption
Performance++
Document Store
Group Replication
We’re Hiring
3
![Page 4: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/4.jpg)
MySQL 8?What happened to MySQL 6 and MySQL 7??
4
![Page 5: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/5.jpg)
Well..
Current GA is 5.7 (October 2015)
MySQL Cluster is 7.5.4
There was a MySQL 6 in the pre-Sun days
Engineering thought the new data dictionary and other new features justified the new major release number.
5
![Page 6: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/6.jpg)
1.Data Dictionary
Before MySQL 8 -- Meta Data Stored in files!
You have a plethora of files out there -- .FRM .MYD .MYI .OPT and many more just waiting for something to go bad -- now store relevant information in data dictionary!
This means you are no longer dependent in the number of inodes on your system, somebody rm-ing the files at just the wrong time, and a whole host of other problems.
Innodb is robust enough to rebuild all information to a point in time in case of problems. So keep EVERYTHING in internal data structures. And that leads to transactional ALTER TABLE commands.
6
![Page 7: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/7.jpg)
Good News!?So now you can have millions of tables within a schema.
The bad news there is that you can have millions of tables within a schema.
7
![Page 8: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/8.jpg)
2.CTEs & Windowing Functions
Long requested, Common Table Expression and Windowing Functions have a wide variety of uses.
CTEs are handy subquery-like statements often used in quick calculations
Windowing Functions are great for iterating over a selected set of rows for things like statistical calculations
8
![Page 9: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/9.jpg)
Windowing FunctionThe key word is OVER
SELECT name, department_id, salary, SUM(salary)OVER (PARTITION BY department_id) AS department_totalFROM employeeORDER BY department_id, name
9
![Page 10: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/10.jpg)
Another ExampleWindowing functions are great when dealing with dates
SELECT date, amount, sum(amount) OVER w AS ‘sum’ FROM paymentsWINDOW w AS (ORDER BY date RANGE BETWEEN INTERVAL 1 WEEK PRECEDING AND CURRENT ROW)ORDER BY date;
10
![Page 11: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/11.jpg)
CTEs
..are like derived tables but the declaration is BEFORE the query
WITH qn AS (SELECT t1 FROM mytable)SELECT * FROM qn.
11
![Page 12: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/12.jpg)
CommonTableExpression -recursive
+------+| n |+------+| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 |+------+10 rows in set (0,00 sec)
WITH RECURSIVE my_cte AS( SELECT 1 AS n UNION ALL SELECT 1+n FROM my_cte WHERE n<10)SELECT * FROM my_cte;
12
![Page 13: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/13.jpg)
3. Optimizer & ParserDescending indexes
Optimizer trace output now includes more information about filesort operations, such as key and payload size and why addon fields are not packed.
The optimizer now supports hints that enable specifying the order in which to join tables.
New sys variable to include estimates for delete marked records includes delete marked records in calculation of table and index statistics. This work was done to overcome a problem with "wrong" statistics where an uncommitted transaction has deleted all rows in the table.
Index and Join Order Hints -- User controls order
NOWAIT and SKIPPED LOCKED to bypass locked records
13
![Page 14: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/14.jpg)
4. Roles
MySQL now supports roles, which are named collections of privileges. Roles can be created and dropped. Roles can have privileges granted to and revoked from them. Roles can be granted to and revoked from user accounts. The active applicable roles for an account can be selected from among those granted to the account, and can be changed during sessions for that account.
14
![Page 15: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/15.jpg)
System Tables are now InnoDBPreviously, these were MyISAM (non transactional) tables. This
change applies to these tables: user, db, tables_priv, columns_priv, procs_priv, proxies_priv.
15
![Page 16: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/16.jpg)
5. Character Sets
MySQL 8 will be UTF8MB4!
16
![Page 17: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/17.jpg)
Not all UTf8 equal
utf8mb4_0900_ai_ci:
0900 refers to Unicode Collation Algorithm version.- ai refers to accent
insensitive.- ci refers to case
insensitive.
Previously UTF8 was actually UTF8MB3● 3 byes, no emojis● Supplementary multilingual
plane support limited● No CJK Unified Ideographs
Extension B are in supplementary ideographic plane
Upgrade problem expected!
Also support GB18030 character set!
17
![Page 18: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/18.jpg)
6. Invisible Indexes
An invisible index is not used by the optimizer at all, but is otherwise maintained normally. Indexes are visible by default. Invisible indexes make it possible to test the effect of removing an index on query performance, without making a destructive change that must be undone should the index turn out to be required 18
![Page 19: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/19.jpg)
7. SET PERSIST
mysql> SET PERSIST innodb_buffer_pool_size = 512 * 1024 * 1024;Query OK, 0 rows affected (0.01 sec)
19
![Page 20: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/20.jpg)
Why SET PERSIST
A MySQL server can be configured and managed over a SQL connection thus removing manual file operations (on configuration files) to be done by DBAs. This feature addresses the usability issues described above, and allows MySQL to be more easily deployed and configured on cloud platforms.
The file mysqld-auto.cnf is created the first time a SET PERSIST statement is executed. Further SET PERSIST statement executions will append the contents to this file. This file is in JSON format and can be parsed using json parser.
Timestamp & User recorded 20
![Page 21: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/21.jpg)
Other new features not dependant on server GA
Decoupling features like Group Replication and Document Store from release cycle to make updates easier
Add new features via a plug-in
Make upgrades less onerous
Easier management of featuresYes, we know that servers can be hard to manage and get harder when they are in the cloud and out of reach of ‘percussive maintenance’ techniques.
21
![Page 22: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/22.jpg)
8. 3G Geometry
“GIS is a form of digital mapping technology. Kind of like Google Earth
but better.”-- Arnold SchwarzeneggerGovernor of California
22
![Page 23: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/23.jpg)
8. 3D GeometryWorld can now be flat or ellipsoidalCoordinate system wrap aroundBoot.Geometry & Open GID Code related to geometry parsing, computing bounding boxes and operations on
them, from the InnoDB layer to the Server layer so that geographic R-trees can be supported easily in the future without having to change anything in InnoDB
23
![Page 24: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/24.jpg)
9. JSONMySQL 8 adds a new unquoting extraction operator ->>, sometimes also referred to as an inline path operator, for use with JSON documents stored in MySQL. The new operator is similar to the -> operator, but performs JSON unquoting of the value as well.The following three expressions are equivalent:
JSON_UNQUOTE( JSON_EXTRACT(mycol, "$.mypath") )JSON_UNQUOTE(mycol->"$.mypath")mycol->>"$.mypath"
Can be used with (but is not limited to) SELECT lists, WHERE and HAVING clauses, and ORDER BY and GROUP BY clauses.
24
![Page 25: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/25.jpg)
JSON_PRETTY
mysql> SELECT JSON_PRETTY('{"a":"10","b":"15","x":"25"}');+---------------------------------------------+| JSON_PRETTY('{"a":"10","b":"15","x":"25"}') |+---------------------------------------------+| { "a": "10", "b": "15", "x": "25"} |+---------------------------------------------+
25
![Page 26: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/26.jpg)
JSON_ARRAYAGGmysql> SELECT col FROM t1;+--------------------------------------+| col |+--------------------------------------+| {"key1": "value1", "key2": "value2"} || {"keyA": "valueA", "keyB": "valueB"} |+--------------------------------------+2 rows in set (0.00 sec)
mysql> SELECT JSON_ARRAYAGG(col) FROM t1;+------------------------------------------------------------------------------+| JSON_ARRAYAGG(col) |+------------------------------------------------------------------------------+| [{"key1": "value1", "key2": "value2"}, {"keyA": "valueA", "keyB": "valueB"}] |+------------------------------------------------------------------------------+ 26
![Page 27: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/27.jpg)
JSON_OBJECTAGG()mysql> SELECT id, col FROM t1;+------+--------------------------------------+| id | col |+------+--------------------------------------+| 1 | {"key1": "value1", "key2": "value2"} || 2 | {"keyA": "valueA", "keyB": "valueB"} |+------+--------------------------------------+2 rows in set (0.00 sec)
mysql> SELECT JSON_OBJECTAGG(id, col) FROM t1;+----------------------------------------------------------------------------------------+| JSON_OBJECTAGG(id, col) |+----------------------------------------------------------------------------------------+| {"1": {"key1": "value1", "key2": "value2"}, "2": {"keyA": "valueA", "keyB": "valueB"}} |+----------------------------------------------------------------------------------------+1 row in set (0.00 sec)
27
![Page 28: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/28.jpg)
JSON_STORAGE_SIZE &JSON_STORAGE_FREEmysql> CREATE TABLE jtable (jcol JSON);Query OK, 0 rows affected (0.42 sec)
mysql> INSERT INTO jtable VALUES -> ('{"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"}');Query OK, 1 row affected (0.04 sec)
mysql> SELECT -> jcol, -> JSON_STORAGE_SIZE(jcol) AS Size, -> JSON_STORAGE_FREE(jcol) AS Free -> FROM jtable;+-----------------------------------------------+------+------+| jcol | Size | Free |+-----------------------------------------------+------+------+| {"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"} | 47 | 0 |+-----------------------------------------------+------+------+1 row in set (0.00 sec) 28
![Page 29: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/29.jpg)
Test Todayhttps://dev.mysql.com/downloads/mysql/
Or Docker images -> https://hub.docker.com/_/mysql/29
![Page 30: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/30.jpg)
The Unofficial MySQL 8 Optimizer Guide
30
http://www.unofficialmysqlguide.com/Server ArchitectureB+tree indexesExplainOptimizer TraceLogical TransformationsExample TransformationsCost-based OptimizationHintsComparing PlansComposite IndexesCovering IndexesVisual ExplainTransient Plans
SubqueriesCTEs and ViewsJoinsAggregationSortingPartitioningQuery RewriteInvisible IndexesProfiling QueriesJSON and Generated ColumnsCharacter Sets
![Page 31: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/31.jpg)
Whew!More features being added!
31
![Page 32: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/32.jpg)
We have goneAbout as far as we can for now!
32
![Page 33: MySQL 8 -- Yorkshire PHP April 8th, 2017](https://reader035.fdocuments.net/reader035/viewer/2022081517/58ef5c601a28abdd368b4573/html5/thumbnails/33.jpg)
Thanks!Contact me:
@stoker
slideshare.net/davidmstokes
elephantanddolphin.blogger.com
33