SlideShare a Scribd company logo
1 of 60
Features
For Fun and ProfitDave Stokes
MySQL Community Manager
David.Stokes@Oracle.com @Stoker
Slides -> https://slideshare.net/davidmstokes
Blog -> https://elephantdolphin.blogspot.com
Safe Harbor 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
MySQL News
โ— 23 years old! Oracle owned for nine years!
โ— MySQL 8.0 is the current Generally Available release
โ— Document Store
โ— Group Replication
โ— Weโ€™re Hiring
3
MySQL 8?
What happened to
MySQL 6 and MySQL 7??
4
Well..
โ— Previous GA is 5.7 (October 2015)
โ— MySQL Cluster is 7.6.9
โ— There was a MySQL 6 in the pre-Sun days, kinda like the PHP version six
that nobody really talks about except in hushed tones and with great
sadness
Engineering thought the new data dictionary and other new features
justified the new major release number.
5
1.Data Dictionary
Before MySQL 8 -- Meta Data Stored in files!
You have had 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
System Tables are now InnoDB
Previously, these were MyISAM (non transactional) tables. This change applies
to these tables: user, db, tables_priv, columns_priv, procs_priv, proxies_priv.
7
Good News!?
So now you can have
millions of tables
within a schema.
The bad news is
that you can have
millions of tables
within a schema.
8
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
9
Windowing
Function
The key word is
OVER
SELECT name,
department_id,
salary,
SUM(salary)
OVER
(PARTITION BY
department_id) AS
department_total
FROM employee
ORDER BY department_id, name 10
Another
Example
Windowing
functions are great
when dealing with
dates
SELECT date, amount,
sum(amount)
OVER w AS โ€˜sumโ€™
FROM payments
WINDOW w AS
(ORDER BY date
RANGE BETWEEN INTERVAL 1
WEEK PRECEDING AND
CURRENT ROW)
ORDER BY date;
11
CTEs
..are like derived
tables but the
declaration is
BEFORE the query
WITH qn AS (SELECT
t1 FROM mytable)
SELECT * FROM qn.
12
JOINing two CTEs 13
WITH
cte1 AS (SELECT a, b FROM table1),
cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;
Common
Table
Expression -
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;
14
Lateral Derived
Tables
SELECT Name,
Population,
District,
x.cc
FROM city,
LATERAL (SELECT Code AS cc
FROM country
WHERE
city.CountryCode = Code) AS x
WHERE District = 'Texas'
ORDER BY name;
15
Easier to write sub queries!
3. Optimizer & Parser
โ— Descending 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
16
EXPLAIN FORMAT=JSON <query>
17
{
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "443.80"
},
"table": {
"table_name": "city",
"access_type": "ALL",
"rows_examined_per_scan": 4188,
"rows_produced_per_join": 418,
"filtered": "10.00",
"cost_info": {
"read_cost": "401.92",
"eval_cost": "41.88",
"prefix_cost": "443.80",
"data_read_per_join": "29K"
},
"used_columns": [
"ID",
"Name",
"CountryCode",
"District",
"Population"
],
"attached_condition": "(`world`.`city`.`Name` = 'Dallas')"
}
}
}
How SKIP LOCKED or NOWAIT look
START TRANSACTION;
SELECT * FROM seats WHERE seat_rows.row_no BETWEEN 2 AND 3 AND booked = 'NO'
FOR UPDATE SKIP LOCKED;
...
COMMIT;
START TRANSACTION
SELECT seat_no
FROM seats JOIN seat_rows USING ( row_no )
WHERE seat_no IN (3,4) AND seat_rows.row_no IN (12)
AND booked = 'NO'
FOR UPDATE OF seats SKIP LOCKED
FOR SHARE OF seat_rows NOWAIT;
18
Contention-Aware Transaction Scheduling
CATS
The CATS algorithm is based on a simple intuition:
not all transactions are equal, and not all objects
are equal. When a transaction already has a lock
on many popular objects, it should get priority
when it requests a new lock. In other words,
unblocking such a transaction will indirectly
contribute to unblocking many more transactions
in the system, which means higher throughput and
lower latency overall.
19
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.
Set up and account for a certain function and then assign
users who need that function.
20
5. Character Sets
MySQL 8
IS by default
UTF8MB4! 21
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 bytes, no emojis
โ— Supplementary multilingual plane
support limited
โ— No CJK Unified Ideographs Extension
B are in supplementary ideographic
plane
Upgrade problem expected!
Also supports GB18030 character set!
22
23
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
24
7. SET PERSIST
mysql> SET PERSIST innodb_buffer_pool_size = 512 * 1024 * 1024;
Query OK, 0 rows affected (0.01 sec)
25
Why SET PERSIST (pronounced Docker)
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
26
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.
27
8. 3G Geometry
โ€œGIS is a form of digital mapping technology.
Kind of like Google Earth but better.โ€
-- Arnold Schwarzenegger
Governor of California
28
8. 3D Geometry
โ— World can now be flat or ellipsoidal
โ— Coordinate system wrap around
โ— Boot.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
29
9. JSON -- A big change in Databases
We can use a JSON field to eliminate one of the issues of traditional database
solutions: many-to-many-joins
This allows more freedom to store unstructured data (data with pieces missing)
You still use SQL to work with the data via a database connector but the JSON
documents in the table can be manipulated directly in code.
Joins can be expensive. Reducing how many places you need to join data can help
speed up your queries. Removing joins may result in some level of denormalization
but can result in fast access to the data. 30
Plan for Mutability
Schemaless designs are focused on mutability. Build your
applications with the ability to modify the document as
needed (and within reason)
31
Remove Many-to-Many Relationships
โ— Use embedded arrays and lists to store relationships among documents.
This can be as simple as embedding the data in the document or
embedding an array of document ids in the document.
โ— In the first case data is available as soon as you can read the document
and in the second it only takes one additional step to retrieve the data. In
cases of seldom read (used) relationships, having the data linked with an
array of ids can be more efficient (less data to read on the first pass)
32
->> Operator
MySQL 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. 33
JSON_PRETTY
mysql> SELECT JSON_PRETTY(doc) FROM countryinfo LIMIT 1;
{
"GNP": 828,
"_id": "ABW",
"Name": "Aruba",
"IndepYear": null,
"geography": {
"Region": "Caribbean",
"Continent": "North America",
"SurfaceArea": 193
},
"government": {
"HeadOfState": "Beatrix",
"GovernmentForm": "Nonmetropolitan Territory of The Netherlands"
},
"demographics": {
"Population": 103000,
"LifeExpectancy": 78.4000015258789
}
}
34
JSON_ARRAYAGG
mysql> 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"}] |
+------------------------------------------------------------------------------+ 35
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)
36
Both JSON_ARRAY_AGG and
JSON_OBJECTAGG() work with
both JSON and non JSON
COLUMNS!
JSON_STORAGE_SIZE &
JSON_STORAGE_FREE
mysql> 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)
37
JSON_TABLE - Structure your unstructured data
SELECT jt.first_name,
jt.last_name,
jt.contact_details
FROM json_documents,
JSON_TABLE(data, '$'
COLUMNS (first_name VARCHAR(50 CHAR) PATH '$.FirstName',
last_name VARCHAR(50 CHAR) PATH '$.LastName',
contact_details VARCHAR(200 CHAR)
FORMAT JSON WITH WRAPPER PATH '$.ContactDetails')) jt
WHERE id > 25;
FIRST_NAME LAST_NAME CONTACT_DETAILS
--------------- --------------- ----------------------------------------
John Doe [{"Email":"john.doe@example.com","Phone"
:"44 123 123456","Twitter":"@johndoe"}]
Jayne Doe [{"Email":"jayne.doe@example.com","Phone
":""}]
38
JSON_TABLE is used for
making JSON data a temorpary
relational data, which is
especially useful when creating
relational views over JSON data,
JSON Table -- a Deeper Look 39
JSON_TABLE(data, '$'
COLUMNS (
first_name VARCHAR(50 CHAR) PATH'$.FirstName',
last_name VARCHAR(50 CHAR) PATH '$.LastName',
contact_details VARCHAR(200 CHAR)
FORMAT JSON WITH WRAPPER PATH '$.ContactDetails')) jt
WHERE id > 25;
FIRST_NAME LAST_NAME CONTACT_DETAILS
--------------- --------------- ----------------------------------------
John Doe [{"Email":"john.doe@example.com","Phone" :"44 123
123456","Twitter":"@johndoe"}]
Jayne Doe [{"Email":"jayne.doe@example.com","Phone ":""}]
MySQL Document Store
Relational databases such as MySQL usually required a document schema to
be defined before documents can be stored.
A new plug-in enables you to use MySQL as a document store, which is a
schema-less, and therefore schema-flexible, storage system for documents.
When using MySQL as a document store, to create documents describing
products you do not need to know and define all possible attributes of any
products before storing them and operating with them.
40
MySQL Document Store
This differs from working with a relational database and storing products in a
table, when all columns of the table must be known and defined before adding
any products to the database.
This allows you to choose how you configure MySQL, using only the document
store model, or combining the flexibility of the document store model with the
power of the relational model.
41
Using the MySQL Document Store with the X DevAPI PECL Extension 42
#!/usr/bin/php
<?PHP
// Connection parameters
$user = 'root'; $passwd = 'hidave'; $host = 'localhost'; $port = '33060';
$connection_uri = 'mysqlx://'.$user.':'.$passwd.'@'.$host.':'.$port;
// Connect as a Node Session
$nodeSession = mysql_xdevapigetNodeSession($connection_uri);
// "USE world_x"
$schema = $nodeSession->getSchema("world_x");
// Specify collection to use
$collection = $schema->getCollection("countryinfo");
// Query the Document Store
$result = $collection->find('_id = "USA"')->fields(['Name as
Country','geography as Geo','geography.Region'])->execute();
// Fetch/Display data
$data = $result->fetchAll();
var_dump($data);
?>
10. Resource Groups
Groups can be established so that threads execute according to the resources available to the group. Group attributes enable control
over its resources, to enable MySQL supports creation and management of resource groups, and permits assigning threads running
within the server to particular group or restrict resource consumption by threads in the group. DBAs can modify these attributes as
appropriate for different workloads.
For example, to manage execution of batch jobs that need not execute with high priority, a DBA can create a Batch resource group,
and adjust its priority up or down depending on how busy the server is. (Perhaps batch jobs assigned to the group should run at lower
priority during the day and at higher priority during the night.) The DBA can also adjust the set of CPUs available to the group.
CREATE RESOURCE GROUP Batch
TYPE = USER
VCPU = 2-3 -- assumes a system with at least 4 CPUs
THREAD_PRIORITY = 10;
INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);
43
11. Histograms - Indexing without indexes!
A histogram is an approximation of the data distribution for a column. It can tell you with a reasonably accuray whether your data is skewed
or not, which in turn will help the database server understand the nature of data it contains.
Histograms comes in many different flavours, and in MySQL we have chosen to support two different types: The โ€œsingletonโ€ histogram and
the โ€œequi-heightโ€ histogram. Common for all histogram types is that they split the data set into a set of โ€œbucketsโ€, and MySQL automatically
divides the values into buckets, and will also automatically decide what type of histogram to create.
Note that the number of buckets must be specified, and can be in the range from 1 to 1024. How many buckets you should choose for your
data set depends on several factors; how many distinct values do you have, how skewed is your data set, how high accuracy do you need
etc. However, after a certain amount of buckets the increased accuracy is rather low. So we suggest to start at a lower number such as 32,
and increase it if you see that it doesnโ€™t fit your needs.
44
Histograms
mysql> ANALYZE TABLE customer UPDATE HISTOGRAM ON c_mktsegment WITH 1024 BUCKETS;
+---------------+-----------+----------+---------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------+-----------+----------+---------------------------------------------------------+
| dbt3.customer | histogram | status | Histogram statistics created for column 'c_mktsegment'. |
+---------------+-----------+----------+---------------------------------------------------------+
45
Two reasons for why you might consider a
histogram instead of an index
Maintaining an index has a cost. If you have an index, every
INSERT/UPDATE/DELETE causes the index to be updated.
This is not free, and will have an impact on your
performance.
A histogram on the other hand is created once and never
updated unless you explicitly ask for it.
It will thus not hurt your INSERT/UPDATE/DELETE-
performance.
46
If you have an index, the optimizer will do what we call
โ€œindex divesโ€ to estimate the number of records in a given
range.
This also has a certain cost, and it might become too costly
if you have for instance very long IN-lists in your query.
Histogram statistics are much cheaper in this case, and
might thus be more suitable.
12. Bye Bye MEMORY Storage Engine
The TempTable storage engine replaces the MEMORY storage engine as the
default engine for in-memory internal temporary tables. The TempTable
storage engine provides efficient storage for VARCHAR and VARBINARY
columns.
Performance is ten times better than 5.7!!
47
https://stackoverflow.com/questions/5050
5236/mysql-8-0-group-by-performance
5down vote
MySQL 8.0 uses a new storage engine, TempTable, for internal temporary tables. (See MySQL Manual for details.) This
engine does not have a max memory limit per table, but a common memory pool for all internal tables. It also has its own
overflow to disk mechanism, and does not overflow to InnoDB or MyISAM as earlier versions.
The profile for 5.7 contains "converting HEAP to ondisk". This means that the table reached the max table size for the
MEMORY engine (default 16 MB) and the data is transferred to InnoDB. Most of the time after that is spent accessing the
temporary table in InnoDB. In MySQL 8.0, the default size of the memory pool for temporary tables is 1 GB, so there will
probably not be any overflow to disk in that case.
48
13. X DevAPI on by default on port 33060
MySQL Document Store allows developers to work
with SQL relational tables and schema-less JSON
collections.
To make that possible MySQL has created the X Dev
API which puts a strong focus on CRUD by providing a
fluent API allowing you to work with JSON documents
in a natural way.
The X Protocol is a highly extensible and is optimized
for CRUD as well as SQL API operations.
49
SQL + NoSQL
Schema-less NoSQL
JSON Document Store
with ACID compliance.
And you can also access
relational data!
50
1GB documents
versus
Mongoโ€™s 16MB!
The 10 Best Restaurants of Different Cuisines
WITH cte1 AS (SELECT doc->>"$.name" AS name,
doc->>"$.cuisine" AS cuisine,
(SELECT AVG(score) FROM JSON_TABLE(doc, "$.grades[*]"
COLUMNS (score INT PATH "$.score")) AS r) AS
avg_score
FROM restaurants)
SELECT *, RANK()
OVER (PARTITION BY cuisine ORDER BY avg_score DESC) AS `rank`
FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10;
+-----------------------+--------------------------------+-----------+------+
| name | cuisine | avg_score | rank |
+-----------------------+--------------------------------+-----------+------+
| Juice It Health Bar | Juice, Smoothies, Fruit Salads | 75.0000 | 1 |
| Golden Dragon Cuisine | Chinese | 73.0000 | 1 |
| Palombo Pastry Shop | Bakery | 69.0000 | 1 |
| Go Go Curry | Japanese | 65.0000 | 1 |
| K & D Internet Inc | Cafรฉ/Coffee/Tea | 61.0000 | 1 |
| Koyla | Middle Eastern | 61.0000 | 1 |
| Ivory D O S Inc | Other | 60.0000 | 1 |
| Espace | American | 56.0000 | 1 |
| Rose Pizza | Pizza | 52.0000 | 1 |
| Tacos Al Suadero | Mexican | 52.0000 | 1 |
+-----------------------+--------------------------------+-----------+------+
51
This query uses
JSON_TABLE to
structure the schema-less
data within a CTE and
then the CTE is queried
to get the top 10
restaurants with a
Windowing Function
52
WITH cte1 AS (SELECT doc->>"$.name" AS name,
doc->>"$.cuisine" AS cuisine,
(SELECT AVG(score) FROM JSON_TABLE(doc, "$.grades[*]"
COLUMNS (score INT PATH "$.score")) AS r) AS avg_score
FROM restaurants)
SELECT *, RANK()
OVER (PARTITION BY cuisine ORDER BY avg_score DESC) AS `rank`
FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10;
+-----------------------+--------------------------------+-----------+------+
| name | cuisine | avg_score | rank |
+-----------------------+--------------------------------+-----------+------+
| Juice It Health Bar | Juice, Smoothies, Fruit Salads | 75.0000 | 1 |
| Golden Dragon Cuisine | Chinese | 73.0000 | 1 |
| Palombo Pastry Shop | Bakery | 69.0000 | 1 |
| Go Go Curry | Japanese | 65.0000 | 1 |
| K & D Internet Inc | Cafรฉ/Coffee/Tea | 61.0000 | 1 |
| Koyla | Middle Eastern | 61.0000 | 1 |
| Ivory D O S Inc | Other | 60.0000 | 1 |
| Espace | American | 56.0000 | 1 |
| Rose Pizza | Pizza | 52.0000 | 1 |
| Tacos Al Suadero | Mexican | 52.0000 | 1 |
+-----------------------+--------------------------------+-----------+------+
That query by itself
The 10 Best Restaurants of Different Cuisines
The JSON_TABLE, CTE, and Windowing Function 53
This query uses
JSON_TABLE to
structure the
schema-less data
within a CTE and
then the CTE is
queried to get the top
10 restaurants with a
Windowing
Function
WITH cte1 AS (SELECT doc->>"$.name" AS name,
doc->>"$.cuisine" AS cuisine,
(SELECT AVG(score) FROM JSON_TABLE(doc,
"$.grades[*]"
COLUMNS (score INT PATH "$.score")) AS r)
AS avg_score
FROM restaurants)
SELECT *, RANK()
OVER (PARTITION BY cuisine ORDER BY avg_score DESC) AS
`rank`
FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10;
Download Today
https://dev.mysql.com/downloads/mysql/
Or Docker images -> https://hub.docker.com/_/mysql/
54
The Unofficial MySQL 8 Optimizer Guide
55
http://www.unofficialmysqlguide.com/
Server Architecture
B+tree indexes
Explain
Optimizer Trace
Logical Transformations
Example Transformations
Cost-based Optimization
Hints
Comparing Plans
Composite Indexes
Covering Indexes
Visual Explain
Transient Plans
Subqueries
CTEs and Views
Joins
Aggregation
Sorting
Partitioning
Query Rewrite
Invisible Indexes
Profiling Queries
JSON and Generated Columns
Character Sets
Whew!
More features being added!
56
MySQL
Group
Replication
MySQL 5.7 or later
57
MySQL Group Replication is a MySQL Server plugin that enables you to create
elastic, highly-available, fault-tolerant replication topologies.
There is a built-in group membership service that keeps the view of the group
consistent and available for all servers at any given point in time. Servers can
leave and join the group and the view is updated accordingly. Sometimes servers
can leave the group unexpectedly, in which case the failure detection mechanism
detects this and notifies the group that the view has changed. This is all automatic.
We have gone
About as far as
we can for now!
58
Buy My Book (please!)
59
What you need
to know to use
the MySQL
JSON data type
with lots of
examples!
Thanks!
Contact me:
@stoker
david.stokes@oracle.com
slideshare.net/davidmstokes
Elephantdolphin.blogspot.com
60

More Related Content

What's hot

Advanced MySQL Query Optimizations
Advanced MySQL Query OptimizationsAdvanced MySQL Query Optimizations
Advanced MySQL Query OptimizationsDave Stokes
ย 
Oracle Data Guard Broker Webinar
Oracle Data Guard Broker WebinarOracle Data Guard Broker Webinar
Oracle Data Guard Broker WebinarZohar Elkayam
ย 
Dso job log and activation parameters
Dso job log and activation parametersDso job log and activation parameters
Dso job log and activation parameterssakthirobotic
ย 
The Challenges of Distributing Postgres: A Citus Story
The Challenges of Distributing Postgres: A Citus StoryThe Challenges of Distributing Postgres: A Citus Story
The Challenges of Distributing Postgres: A Citus StoryHanna Kelman
ย 
Oracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BIOracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BIFranck Pachot
ย 
Dbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easyDbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easyFranck Pachot
ย 
[Pgday.Seoul 2018] ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PG
[Pgday.Seoul 2018]  ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PG[Pgday.Seoul 2018]  ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PG
[Pgday.Seoul 2018] ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PGPgDay.Seoul
ย 
Testing Delphix: easy data virtualization
Testing Delphix: easy data virtualizationTesting Delphix: easy data virtualization
Testing Delphix: easy data virtualizationFranck Pachot
ย 
Database Basics and MySQL
Database Basics and MySQLDatabase Basics and MySQL
Database Basics and MySQLJerome Locson
ย 
TSQL in SQL Server 2012
TSQL in SQL Server 2012TSQL in SQL Server 2012
TSQL in SQL Server 2012Eduardo Castro
ย 
MySQL Replication Evolution -- Confoo Montreal 2017
MySQL Replication Evolution -- Confoo Montreal 2017MySQL Replication Evolution -- Confoo Montreal 2017
MySQL Replication Evolution -- Confoo Montreal 2017Dave Stokes
ย 
Exadata X3 in action: Measuring Smart Scan efficiency with AWR
Exadata X3 in action:  Measuring Smart Scan efficiency with AWRExadata X3 in action:  Measuring Smart Scan efficiency with AWR
Exadata X3 in action: Measuring Smart Scan efficiency with AWRFranck Pachot
ย 
Getting Started with MySQL II
Getting Started with MySQL IIGetting Started with MySQL II
Getting Started with MySQL IISankhya_Analytics
ย 
Oracle Table Partitioning - Introduction
Oracle Table Partitioning  - IntroductionOracle Table Partitioning  - Introduction
Oracle Table Partitioning - IntroductionMyOnlineITCourses
ย 
Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...
Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...
Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...Massimo Cenci
ย 
New T-SQL Features in SQL Server 2012
New T-SQL Features in SQL Server 2012 New T-SQL Features in SQL Server 2012
New T-SQL Features in SQL Server 2012 Richie Rump
ย 
Cassandra20141113
Cassandra20141113Cassandra20141113
Cassandra20141113Brian Enochson
ย 
Migration from 8.1 to 11.3
Migration from 8.1 to 11.3Migration from 8.1 to 11.3
Migration from 8.1 to 11.3Suryakant Bharati
ย 

What's hot (20)

Advanced MySQL Query Optimizations
Advanced MySQL Query OptimizationsAdvanced MySQL Query Optimizations
Advanced MySQL Query Optimizations
ย 
Oracle Data Guard Broker Webinar
Oracle Data Guard Broker WebinarOracle Data Guard Broker Webinar
Oracle Data Guard Broker Webinar
ย 
Dso job log and activation parameters
Dso job log and activation parametersDso job log and activation parameters
Dso job log and activation parameters
ย 
The Challenges of Distributing Postgres: A Citus Story
The Challenges of Distributing Postgres: A Citus StoryThe Challenges of Distributing Postgres: A Citus Story
The Challenges of Distributing Postgres: A Citus Story
ย 
Oracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BIOracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BI
ย 
Dbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easyDbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easy
ย 
[Pgday.Seoul 2018] ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PG
[Pgday.Seoul 2018]  ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PG[Pgday.Seoul 2018]  ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PG
[Pgday.Seoul 2018] ์ด๊ธฐ์ข… DB์—์„œ PostgreSQL๋กœ์˜ Migration์„ ์œ„ํ•œ DB2PG
ย 
Partitioning 11g-whitepaper-159443
Partitioning 11g-whitepaper-159443Partitioning 11g-whitepaper-159443
Partitioning 11g-whitepaper-159443
ย 
Testing Delphix: easy data virtualization
Testing Delphix: easy data virtualizationTesting Delphix: easy data virtualization
Testing Delphix: easy data virtualization
ย 
Database Basics and MySQL
Database Basics and MySQLDatabase Basics and MySQL
Database Basics and MySQL
ย 
TSQL in SQL Server 2012
TSQL in SQL Server 2012TSQL in SQL Server 2012
TSQL in SQL Server 2012
ย 
MySQL Replication Evolution -- Confoo Montreal 2017
MySQL Replication Evolution -- Confoo Montreal 2017MySQL Replication Evolution -- Confoo Montreal 2017
MySQL Replication Evolution -- Confoo Montreal 2017
ย 
Exadata X3 in action: Measuring Smart Scan efficiency with AWR
Exadata X3 in action:  Measuring Smart Scan efficiency with AWRExadata X3 in action:  Measuring Smart Scan efficiency with AWR
Exadata X3 in action: Measuring Smart Scan efficiency with AWR
ย 
Getting Started with MySQL II
Getting Started with MySQL IIGetting Started with MySQL II
Getting Started with MySQL II
ย 
Oracle Table Partitioning - Introduction
Oracle Table Partitioning  - IntroductionOracle Table Partitioning  - Introduction
Oracle Table Partitioning - Introduction
ย 
Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...
Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...
Recipe 5 of Data Warehouse and Business Intelligence - The null values manage...
ย 
Big table
Big tableBig table
Big table
ย 
New T-SQL Features in SQL Server 2012
New T-SQL Features in SQL Server 2012 New T-SQL Features in SQL Server 2012
New T-SQL Features in SQL Server 2012
ย 
Cassandra20141113
Cassandra20141113Cassandra20141113
Cassandra20141113
ย 
Migration from 8.1 to 11.3
Migration from 8.1 to 11.3Migration from 8.1 to 11.3
Migration from 8.1 to 11.3
ย 

Similar to MySQL 8.0 Featured for Developers

MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019
MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019
MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019Dave Stokes
ย 
MySQL 8 Server Optimization Swanseacon 2018
MySQL 8 Server Optimization Swanseacon 2018MySQL 8 Server Optimization Swanseacon 2018
MySQL 8 Server Optimization Swanseacon 2018Dave Stokes
ย 
cPanel now supports MySQL 8.0 - My Top Seven Features
cPanel now supports MySQL 8.0 - My Top Seven FeaturescPanel now supports MySQL 8.0 - My Top Seven Features
cPanel now supports MySQL 8.0 - My Top Seven FeaturesDave Stokes
ย 
PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...
PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...
PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...Dave Stokes
ย 
Midwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL FeaturesMidwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL FeaturesDave Stokes
ย 
Developersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgrade
Developersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgradeDevelopersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgrade
Developersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgrademCloud
ย 
Confoo 2021 -- MySQL New Features
Confoo 2021 -- MySQL New FeaturesConfoo 2021 -- MySQL New Features
Confoo 2021 -- MySQL New FeaturesDave Stokes
ย 
Bank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AE
Bank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AEBank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AE
Bank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AEEngr. Md. Jamal Uddin Rayhan
ย 
Remote DBA Experts 11g Features
Remote DBA Experts 11g FeaturesRemote DBA Experts 11g Features
Remote DBA Experts 11g FeaturesRemote DBA Experts
ย 
Data management in cloud study of existing systems and future opportunities
Data management in cloud study of existing systems and future opportunitiesData management in cloud study of existing systems and future opportunities
Data management in cloud study of existing systems and future opportunitiesEditor Jacotech
ย 
At the core you will have KUSTO
At the core you will have KUSTOAt the core you will have KUSTO
At the core you will have KUSTORiccardo Zamana
ย 
MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...
MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...
MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...cscpconf
ย 
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Aaron Shilo
ย 
Ohio Linux Fest -- MySQL's NoSQL
Ohio Linux Fest -- MySQL's NoSQLOhio Linux Fest -- MySQL's NoSQL
Ohio Linux Fest -- MySQL's NoSQLDave Stokes
ย 
Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...
Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...
Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...Cynthia Saracco
ย 
Migrating on premises workload to azure sql database
Migrating on premises workload to azure sql databaseMigrating on premises workload to azure sql database
Migrating on premises workload to azure sql databasePARIKSHIT SAVJANI
ย 
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Upgrade to MySQL 5.7 and latest news planned for MySQL 8Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Upgrade to MySQL 5.7 and latest news planned for MySQL 8Ted Wennmark
ย 

Similar to MySQL 8.0 Featured for Developers (20)

MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019
MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019
MySQL 8 - UKOUG Techfest Brighton December 2nd, 2019
ย 
MySQL 8 Server Optimization Swanseacon 2018
MySQL 8 Server Optimization Swanseacon 2018MySQL 8 Server Optimization Swanseacon 2018
MySQL 8 Server Optimization Swanseacon 2018
ย 
cPanel now supports MySQL 8.0 - My Top Seven Features
cPanel now supports MySQL 8.0 - My Top Seven FeaturescPanel now supports MySQL 8.0 - My Top Seven Features
cPanel now supports MySQL 8.0 - My Top Seven Features
ย 
Oracle
OracleOracle
Oracle
ย 
PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...
PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...
PHP UK 2020 Tutorial: MySQL Indexes, Histograms And other ways To Speed Up Yo...
ย 
Midwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL FeaturesMidwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL Features
ย 
Developersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgrade
Developersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgradeDevelopersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgrade
Developersโ€™ mDay 2019. - Bogdan Kecman, Oracle โ€“ MySQL 8.0 โ€“ why upgrade
ย 
Confoo 2021 -- MySQL New Features
Confoo 2021 -- MySQL New FeaturesConfoo 2021 -- MySQL New Features
Confoo 2021 -- MySQL New Features
ย 
notes
notesnotes
notes
ย 
Bank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AE
Bank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AEBank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AE
Bank Question Solution-ADBA Previous Year Question for AP, ANE, AME, ADA, AE
ย 
NOSQL
NOSQLNOSQL
NOSQL
ย 
Remote DBA Experts 11g Features
Remote DBA Experts 11g FeaturesRemote DBA Experts 11g Features
Remote DBA Experts 11g Features
ย 
Data management in cloud study of existing systems and future opportunities
Data management in cloud study of existing systems and future opportunitiesData management in cloud study of existing systems and future opportunities
Data management in cloud study of existing systems and future opportunities
ย 
At the core you will have KUSTO
At the core you will have KUSTOAt the core you will have KUSTO
At the core you will have KUSTO
ย 
MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...
MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...
MIGRATION OF AN OLTP SYSTEM FROM ORACLE TO MYSQL AND COMPARATIVE PERFORMANCE ...
ย 
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
ย 
Ohio Linux Fest -- MySQL's NoSQL
Ohio Linux Fest -- MySQL's NoSQLOhio Linux Fest -- MySQL's NoSQL
Ohio Linux Fest -- MySQL's NoSQL
ย 
Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...
Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...
Big Data: Getting off to a fast start with Big SQL (World of Watson 2016 sess...
ย 
Migrating on premises workload to azure sql database
Migrating on premises workload to azure sql databaseMigrating on premises workload to azure sql database
Migrating on premises workload to azure sql database
ย 
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Upgrade to MySQL 5.7 and latest news planned for MySQL 8Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
ย 

More from Dave Stokes

Json within a relational database
Json within a relational databaseJson within a relational database
Json within a relational databaseDave Stokes
ย 
Database basics for new-ish developers -- All Things Open October 18th 2021
Database basics for new-ish developers  -- All Things Open October 18th 2021Database basics for new-ish developers  -- All Things Open October 18th 2021
Database basics for new-ish developers -- All Things Open October 18th 2021Dave Stokes
ย 
Php &amp; my sql - how do pdo, mysq-li, and x devapi do what they do
Php &amp; my sql  - how do pdo, mysq-li, and x devapi do what they doPhp &amp; my sql  - how do pdo, mysq-li, and x devapi do what they do
Php &amp; my sql - how do pdo, mysq-li, and x devapi do what they doDave Stokes
ย 
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...Dave Stokes
ย 
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source SummitMySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source SummitDave Stokes
ย 
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScriptJavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScriptDave Stokes
ย 
Open Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseOpen Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseDave Stokes
ย 
Dutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and HistogramsDutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and HistogramsDave Stokes
ย 
Validating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationValidating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationDave Stokes
ย 
Data Love Conference - Window Functions for Database Analytics
Data Love Conference - Window Functions for Database AnalyticsData Love Conference - Window Functions for Database Analytics
Data Love Conference - Window Functions for Database AnalyticsDave Stokes
ย 
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...Dave Stokes
ย 
Confoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & HistogramsConfoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & HistogramsDave Stokes
ย 
Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my! Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my! Dave Stokes
ย 
MySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationMySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationDave Stokes
ย 
MySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesMySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesDave Stokes
ย 
A Step by Step Introduction to the MySQL Document Store
A Step by Step Introduction to the MySQL Document StoreA Step by Step Introduction to the MySQL Document Store
A Step by Step Introduction to the MySQL Document StoreDave Stokes
ย 
Discover The Power of NoSQL + MySQL with MySQL
Discover The Power of NoSQL + MySQL with MySQLDiscover The Power of NoSQL + MySQL with MySQL
Discover The Power of NoSQL + MySQL with MySQLDave Stokes
ย 
Discover the Power of the NoSQL + SQL with MySQL
Discover the Power of the NoSQL + SQL with MySQLDiscover the Power of the NoSQL + SQL with MySQL
Discover the Power of the NoSQL + SQL with MySQLDave Stokes
ย 
Confoo 202 - MySQL Group Replication and ReplicaSet
Confoo 202 - MySQL Group Replication and ReplicaSetConfoo 202 - MySQL Group Replication and ReplicaSet
Confoo 202 - MySQL Group Replication and ReplicaSetDave Stokes
ย 
MySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 PresentationMySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 PresentationDave Stokes
ย 

More from Dave Stokes (20)

Json within a relational database
Json within a relational databaseJson within a relational database
Json within a relational database
ย 
Database basics for new-ish developers -- All Things Open October 18th 2021
Database basics for new-ish developers  -- All Things Open October 18th 2021Database basics for new-ish developers  -- All Things Open October 18th 2021
Database basics for new-ish developers -- All Things Open October 18th 2021
ย 
Php &amp; my sql - how do pdo, mysq-li, and x devapi do what they do
Php &amp; my sql  - how do pdo, mysq-li, and x devapi do what they doPhp &amp; my sql  - how do pdo, mysq-li, and x devapi do what they do
Php &amp; my sql - how do pdo, mysq-li, and x devapi do what they do
ย 
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
ย 
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source SummitMySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
ย 
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScriptJavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
ย 
Open Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseOpen Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational Database
ย 
Dutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and HistogramsDutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and Histograms
ย 
Validating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationValidating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentation
ย 
Data Love Conference - Window Functions for Database Analytics
Data Love Conference - Window Functions for Database AnalyticsData Love Conference - Window Functions for Database Analytics
Data Love Conference - Window Functions for Database Analytics
ย 
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
ย 
Confoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & HistogramsConfoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & Histograms
ย 
Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my! Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my!
ย 
MySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationMySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentation
ย 
MySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesMySQL 8.0 Operational Changes
MySQL 8.0 Operational Changes
ย 
A Step by Step Introduction to the MySQL Document Store
A Step by Step Introduction to the MySQL Document StoreA Step by Step Introduction to the MySQL Document Store
A Step by Step Introduction to the MySQL Document Store
ย 
Discover The Power of NoSQL + MySQL with MySQL
Discover The Power of NoSQL + MySQL with MySQLDiscover The Power of NoSQL + MySQL with MySQL
Discover The Power of NoSQL + MySQL with MySQL
ย 
Discover the Power of the NoSQL + SQL with MySQL
Discover the Power of the NoSQL + SQL with MySQLDiscover the Power of the NoSQL + SQL with MySQL
Discover the Power of the NoSQL + SQL with MySQL
ย 
Confoo 202 - MySQL Group Replication and ReplicaSet
Confoo 202 - MySQL Group Replication and ReplicaSetConfoo 202 - MySQL Group Replication and ReplicaSet
Confoo 202 - MySQL Group Replication and ReplicaSet
ย 
MySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 PresentationMySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 Presentation
ย 

Recently uploaded

pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfJOHNBEBONYAP1
ย 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtrahman018755
ย 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...SUHANI PANDEY
ย 
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...APNIC
ย 
๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ
๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ
๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ@Chandigarh #call #Girls 9053900678 @Call #Girls in @Punjab 9053900678
ย 
๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹
๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹
๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹nirzagarg
ย 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...SUHANI PANDEY
ย 
best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...
best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...
best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...kajalverma014
ย 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirtrahman018755
ย 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...tanu pandey
ย 
Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...
Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...
Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...Delhi Call girls
ย 
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdfMatthew Sinclair
ย 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...SUHANI PANDEY
ย 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...singhpriety023
ย 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...roncy bisnoi
ย 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableSeo
ย 
Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...
Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...
Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...SUHANI PANDEY
ย 

Recently uploaded (20)

pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
ย 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
ย 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
ย 
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
ย 
๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ
๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ
๐Ÿ“ฑDehradun Call Girls Service ๐Ÿ“ฑโ˜Ž๏ธ +91'905,3900,678 โ˜Ž๏ธ๐Ÿ“ฑ Call Girls In Dehradun ๐Ÿ“ฑ
ย 
๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹
๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹
๐Ÿ’š๐Ÿ˜‹ Bilaspur Escort Service Call Girls, 9352852248 โ‚น5000 To 25K With AC๐Ÿ’š๐Ÿ˜‹
ย 
Thalassery Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call G...
Thalassery Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call G...Thalassery Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call G...
Thalassery Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call G...
ย 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
ย 
best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...
best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...
best call girls in Hyderabad Finest Escorts Service ๐Ÿ“ž 9352988975 ๐Ÿ“ž Available ...
ย 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
ย 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
ย 
valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
ย 
Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...
Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...
Hireโ† Young Call Girls in Tilak nagar (Delhi) โ˜Ž๏ธ 9205541914 โ˜Ž๏ธ Independent Esc...
ย 
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
ย 
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
ย 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
ย 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
ย 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
ย 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
ย 
Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...
Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...
Wadgaon Sheri $ Call Girls Pune 10k @ I'm VIP Independent Escorts Girls 80057...
ย 

MySQL 8.0 Featured for Developers

  • 1. Features For Fun and ProfitDave Stokes MySQL Community Manager David.Stokes@Oracle.com @Stoker Slides -> https://slideshare.net/davidmstokes Blog -> https://elephantdolphin.blogspot.com
  • 2. Safe Harbor 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
  • 3. MySQL News โ— 23 years old! Oracle owned for nine years! โ— MySQL 8.0 is the current Generally Available release โ— Document Store โ— Group Replication โ— Weโ€™re Hiring 3
  • 4. MySQL 8? What happened to MySQL 6 and MySQL 7?? 4
  • 5. Well.. โ— Previous GA is 5.7 (October 2015) โ— MySQL Cluster is 7.6.9 โ— There was a MySQL 6 in the pre-Sun days, kinda like the PHP version six that nobody really talks about except in hushed tones and with great sadness Engineering thought the new data dictionary and other new features justified the new major release number. 5
  • 6. 1.Data Dictionary Before MySQL 8 -- Meta Data Stored in files! You have had 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
  • 7. System Tables are now InnoDB Previously, these were MyISAM (non transactional) tables. This change applies to these tables: user, db, tables_priv, columns_priv, procs_priv, proxies_priv. 7
  • 8. Good News!? So now you can have millions of tables within a schema. The bad news is that you can have millions of tables within a schema. 8
  • 9. 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 9
  • 10. Windowing Function The key word is OVER SELECT name, department_id, salary, SUM(salary) OVER (PARTITION BY department_id) AS department_total FROM employee ORDER BY department_id, name 10
  • 11. Another Example Windowing functions are great when dealing with dates SELECT date, amount, sum(amount) OVER w AS โ€˜sumโ€™ FROM payments WINDOW w AS (ORDER BY date RANGE BETWEEN INTERVAL 1 WEEK PRECEDING AND CURRENT ROW) ORDER BY date; 11
  • 12. CTEs ..are like derived tables but the declaration is BEFORE the query WITH qn AS (SELECT t1 FROM mytable) SELECT * FROM qn. 12
  • 13. JOINing two CTEs 13 WITH cte1 AS (SELECT a, b FROM table1), cte2 AS (SELECT c, d FROM table2) SELECT b, d FROM cte1 JOIN cte2 WHERE cte1.a = cte2.c;
  • 14. Common Table Expression - 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; 14
  • 15. Lateral Derived Tables SELECT Name, Population, District, x.cc FROM city, LATERAL (SELECT Code AS cc FROM country WHERE city.CountryCode = Code) AS x WHERE District = 'Texas' ORDER BY name; 15 Easier to write sub queries!
  • 16. 3. Optimizer & Parser โ— Descending 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 16
  • 17. EXPLAIN FORMAT=JSON <query> 17 { "query_block": { "select_id": 1, "cost_info": { "query_cost": "443.80" }, "table": { "table_name": "city", "access_type": "ALL", "rows_examined_per_scan": 4188, "rows_produced_per_join": 418, "filtered": "10.00", "cost_info": { "read_cost": "401.92", "eval_cost": "41.88", "prefix_cost": "443.80", "data_read_per_join": "29K" }, "used_columns": [ "ID", "Name", "CountryCode", "District", "Population" ], "attached_condition": "(`world`.`city`.`Name` = 'Dallas')" } } }
  • 18. How SKIP LOCKED or NOWAIT look START TRANSACTION; SELECT * FROM seats WHERE seat_rows.row_no BETWEEN 2 AND 3 AND booked = 'NO' FOR UPDATE SKIP LOCKED; ... COMMIT; START TRANSACTION SELECT seat_no FROM seats JOIN seat_rows USING ( row_no ) WHERE seat_no IN (3,4) AND seat_rows.row_no IN (12) AND booked = 'NO' FOR UPDATE OF seats SKIP LOCKED FOR SHARE OF seat_rows NOWAIT; 18
  • 19. Contention-Aware Transaction Scheduling CATS The CATS algorithm is based on a simple intuition: not all transactions are equal, and not all objects are equal. When a transaction already has a lock on many popular objects, it should get priority when it requests a new lock. In other words, unblocking such a transaction will indirectly contribute to unblocking many more transactions in the system, which means higher throughput and lower latency overall. 19
  • 20. 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. Set up and account for a certain function and then assign users who need that function. 20
  • 21. 5. Character Sets MySQL 8 IS by default UTF8MB4! 21
  • 22. 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 bytes, no emojis โ— Supplementary multilingual plane support limited โ— No CJK Unified Ideographs Extension B are in supplementary ideographic plane Upgrade problem expected! Also supports GB18030 character set! 22
  • 23. 23
  • 24. 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 24
  • 25. 7. SET PERSIST mysql> SET PERSIST innodb_buffer_pool_size = 512 * 1024 * 1024; Query OK, 0 rows affected (0.01 sec) 25
  • 26. Why SET PERSIST (pronounced Docker) 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 26
  • 27. 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. 27
  • 28. 8. 3G Geometry โ€œGIS is a form of digital mapping technology. Kind of like Google Earth but better.โ€ -- Arnold Schwarzenegger Governor of California 28
  • 29. 8. 3D Geometry โ— World can now be flat or ellipsoidal โ— Coordinate system wrap around โ— Boot.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 29
  • 30. 9. JSON -- A big change in Databases We can use a JSON field to eliminate one of the issues of traditional database solutions: many-to-many-joins This allows more freedom to store unstructured data (data with pieces missing) You still use SQL to work with the data via a database connector but the JSON documents in the table can be manipulated directly in code. Joins can be expensive. Reducing how many places you need to join data can help speed up your queries. Removing joins may result in some level of denormalization but can result in fast access to the data. 30
  • 31. Plan for Mutability Schemaless designs are focused on mutability. Build your applications with the ability to modify the document as needed (and within reason) 31
  • 32. Remove Many-to-Many Relationships โ— Use embedded arrays and lists to store relationships among documents. This can be as simple as embedding the data in the document or embedding an array of document ids in the document. โ— In the first case data is available as soon as you can read the document and in the second it only takes one additional step to retrieve the data. In cases of seldom read (used) relationships, having the data linked with an array of ids can be more efficient (less data to read on the first pass) 32
  • 33. ->> Operator MySQL 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. 33
  • 34. JSON_PRETTY mysql> SELECT JSON_PRETTY(doc) FROM countryinfo LIMIT 1; { "GNP": 828, "_id": "ABW", "Name": "Aruba", "IndepYear": null, "geography": { "Region": "Caribbean", "Continent": "North America", "SurfaceArea": 193 }, "government": { "HeadOfState": "Beatrix", "GovernmentForm": "Nonmetropolitan Territory of The Netherlands" }, "demographics": { "Population": 103000, "LifeExpectancy": 78.4000015258789 } } 34
  • 35. JSON_ARRAYAGG mysql> 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"}] | +------------------------------------------------------------------------------+ 35
  • 36. 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) 36 Both JSON_ARRAY_AGG and JSON_OBJECTAGG() work with both JSON and non JSON COLUMNS!
  • 37. JSON_STORAGE_SIZE & JSON_STORAGE_FREE mysql> 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) 37
  • 38. JSON_TABLE - Structure your unstructured data SELECT jt.first_name, jt.last_name, jt.contact_details FROM json_documents, JSON_TABLE(data, '$' COLUMNS (first_name VARCHAR(50 CHAR) PATH '$.FirstName', last_name VARCHAR(50 CHAR) PATH '$.LastName', contact_details VARCHAR(200 CHAR) FORMAT JSON WITH WRAPPER PATH '$.ContactDetails')) jt WHERE id > 25; FIRST_NAME LAST_NAME CONTACT_DETAILS --------------- --------------- ---------------------------------------- John Doe [{"Email":"john.doe@example.com","Phone" :"44 123 123456","Twitter":"@johndoe"}] Jayne Doe [{"Email":"jayne.doe@example.com","Phone ":""}] 38 JSON_TABLE is used for making JSON data a temorpary relational data, which is especially useful when creating relational views over JSON data,
  • 39. JSON Table -- a Deeper Look 39 JSON_TABLE(data, '$' COLUMNS ( first_name VARCHAR(50 CHAR) PATH'$.FirstName', last_name VARCHAR(50 CHAR) PATH '$.LastName', contact_details VARCHAR(200 CHAR) FORMAT JSON WITH WRAPPER PATH '$.ContactDetails')) jt WHERE id > 25; FIRST_NAME LAST_NAME CONTACT_DETAILS --------------- --------------- ---------------------------------------- John Doe [{"Email":"john.doe@example.com","Phone" :"44 123 123456","Twitter":"@johndoe"}] Jayne Doe [{"Email":"jayne.doe@example.com","Phone ":""}]
  • 40. MySQL Document Store Relational databases such as MySQL usually required a document schema to be defined before documents can be stored. A new plug-in enables you to use MySQL as a document store, which is a schema-less, and therefore schema-flexible, storage system for documents. When using MySQL as a document store, to create documents describing products you do not need to know and define all possible attributes of any products before storing them and operating with them. 40
  • 41. MySQL Document Store This differs from working with a relational database and storing products in a table, when all columns of the table must be known and defined before adding any products to the database. This allows you to choose how you configure MySQL, using only the document store model, or combining the flexibility of the document store model with the power of the relational model. 41
  • 42. Using the MySQL Document Store with the X DevAPI PECL Extension 42 #!/usr/bin/php <?PHP // Connection parameters $user = 'root'; $passwd = 'hidave'; $host = 'localhost'; $port = '33060'; $connection_uri = 'mysqlx://'.$user.':'.$passwd.'@'.$host.':'.$port; // Connect as a Node Session $nodeSession = mysql_xdevapigetNodeSession($connection_uri); // "USE world_x" $schema = $nodeSession->getSchema("world_x"); // Specify collection to use $collection = $schema->getCollection("countryinfo"); // Query the Document Store $result = $collection->find('_id = "USA"')->fields(['Name as Country','geography as Geo','geography.Region'])->execute(); // Fetch/Display data $data = $result->fetchAll(); var_dump($data); ?>
  • 43. 10. Resource Groups Groups can be established so that threads execute according to the resources available to the group. Group attributes enable control over its resources, to enable MySQL supports creation and management of resource groups, and permits assigning threads running within the server to particular group or restrict resource consumption by threads in the group. DBAs can modify these attributes as appropriate for different workloads. For example, to manage execution of batch jobs that need not execute with high priority, a DBA can create a Batch resource group, and adjust its priority up or down depending on how busy the server is. (Perhaps batch jobs assigned to the group should run at lower priority during the day and at higher priority during the night.) The DBA can also adjust the set of CPUs available to the group. CREATE RESOURCE GROUP Batch TYPE = USER VCPU = 2-3 -- assumes a system with at least 4 CPUs THREAD_PRIORITY = 10; INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2); 43
  • 44. 11. Histograms - Indexing without indexes! A histogram is an approximation of the data distribution for a column. It can tell you with a reasonably accuray whether your data is skewed or not, which in turn will help the database server understand the nature of data it contains. Histograms comes in many different flavours, and in MySQL we have chosen to support two different types: The โ€œsingletonโ€ histogram and the โ€œequi-heightโ€ histogram. Common for all histogram types is that they split the data set into a set of โ€œbucketsโ€, and MySQL automatically divides the values into buckets, and will also automatically decide what type of histogram to create. Note that the number of buckets must be specified, and can be in the range from 1 to 1024. How many buckets you should choose for your data set depends on several factors; how many distinct values do you have, how skewed is your data set, how high accuracy do you need etc. However, after a certain amount of buckets the increased accuracy is rather low. So we suggest to start at a lower number such as 32, and increase it if you see that it doesnโ€™t fit your needs. 44
  • 45. Histograms mysql> ANALYZE TABLE customer UPDATE HISTOGRAM ON c_mktsegment WITH 1024 BUCKETS; +---------------+-----------+----------+---------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +---------------+-----------+----------+---------------------------------------------------------+ | dbt3.customer | histogram | status | Histogram statistics created for column 'c_mktsegment'. | +---------------+-----------+----------+---------------------------------------------------------+ 45
  • 46. Two reasons for why you might consider a histogram instead of an index Maintaining an index has a cost. If you have an index, every INSERT/UPDATE/DELETE causes the index to be updated. This is not free, and will have an impact on your performance. A histogram on the other hand is created once and never updated unless you explicitly ask for it. It will thus not hurt your INSERT/UPDATE/DELETE- performance. 46 If you have an index, the optimizer will do what we call โ€œindex divesโ€ to estimate the number of records in a given range. This also has a certain cost, and it might become too costly if you have for instance very long IN-lists in your query. Histogram statistics are much cheaper in this case, and might thus be more suitable.
  • 47. 12. Bye Bye MEMORY Storage Engine The TempTable storage engine replaces the MEMORY storage engine as the default engine for in-memory internal temporary tables. The TempTable storage engine provides efficient storage for VARCHAR and VARBINARY columns. Performance is ten times better than 5.7!! 47
  • 48. https://stackoverflow.com/questions/5050 5236/mysql-8-0-group-by-performance 5down vote MySQL 8.0 uses a new storage engine, TempTable, for internal temporary tables. (See MySQL Manual for details.) This engine does not have a max memory limit per table, but a common memory pool for all internal tables. It also has its own overflow to disk mechanism, and does not overflow to InnoDB or MyISAM as earlier versions. The profile for 5.7 contains "converting HEAP to ondisk". This means that the table reached the max table size for the MEMORY engine (default 16 MB) and the data is transferred to InnoDB. Most of the time after that is spent accessing the temporary table in InnoDB. In MySQL 8.0, the default size of the memory pool for temporary tables is 1 GB, so there will probably not be any overflow to disk in that case. 48
  • 49. 13. X DevAPI on by default on port 33060 MySQL Document Store allows developers to work with SQL relational tables and schema-less JSON collections. To make that possible MySQL has created the X Dev API which puts a strong focus on CRUD by providing a fluent API allowing you to work with JSON documents in a natural way. The X Protocol is a highly extensible and is optimized for CRUD as well as SQL API operations. 49
  • 50. SQL + NoSQL Schema-less NoSQL JSON Document Store with ACID compliance. And you can also access relational data! 50 1GB documents versus Mongoโ€™s 16MB!
  • 51. The 10 Best Restaurants of Different Cuisines WITH cte1 AS (SELECT doc->>"$.name" AS name, doc->>"$.cuisine" AS cuisine, (SELECT AVG(score) FROM JSON_TABLE(doc, "$.grades[*]" COLUMNS (score INT PATH "$.score")) AS r) AS avg_score FROM restaurants) SELECT *, RANK() OVER (PARTITION BY cuisine ORDER BY avg_score DESC) AS `rank` FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10; +-----------------------+--------------------------------+-----------+------+ | name | cuisine | avg_score | rank | +-----------------------+--------------------------------+-----------+------+ | Juice It Health Bar | Juice, Smoothies, Fruit Salads | 75.0000 | 1 | | Golden Dragon Cuisine | Chinese | 73.0000 | 1 | | Palombo Pastry Shop | Bakery | 69.0000 | 1 | | Go Go Curry | Japanese | 65.0000 | 1 | | K & D Internet Inc | Cafรฉ/Coffee/Tea | 61.0000 | 1 | | Koyla | Middle Eastern | 61.0000 | 1 | | Ivory D O S Inc | Other | 60.0000 | 1 | | Espace | American | 56.0000 | 1 | | Rose Pizza | Pizza | 52.0000 | 1 | | Tacos Al Suadero | Mexican | 52.0000 | 1 | +-----------------------+--------------------------------+-----------+------+ 51 This query uses JSON_TABLE to structure the schema-less data within a CTE and then the CTE is queried to get the top 10 restaurants with a Windowing Function
  • 52. 52 WITH cte1 AS (SELECT doc->>"$.name" AS name, doc->>"$.cuisine" AS cuisine, (SELECT AVG(score) FROM JSON_TABLE(doc, "$.grades[*]" COLUMNS (score INT PATH "$.score")) AS r) AS avg_score FROM restaurants) SELECT *, RANK() OVER (PARTITION BY cuisine ORDER BY avg_score DESC) AS `rank` FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10; +-----------------------+--------------------------------+-----------+------+ | name | cuisine | avg_score | rank | +-----------------------+--------------------------------+-----------+------+ | Juice It Health Bar | Juice, Smoothies, Fruit Salads | 75.0000 | 1 | | Golden Dragon Cuisine | Chinese | 73.0000 | 1 | | Palombo Pastry Shop | Bakery | 69.0000 | 1 | | Go Go Curry | Japanese | 65.0000 | 1 | | K & D Internet Inc | Cafรฉ/Coffee/Tea | 61.0000 | 1 | | Koyla | Middle Eastern | 61.0000 | 1 | | Ivory D O S Inc | Other | 60.0000 | 1 | | Espace | American | 56.0000 | 1 | | Rose Pizza | Pizza | 52.0000 | 1 | | Tacos Al Suadero | Mexican | 52.0000 | 1 | +-----------------------+--------------------------------+-----------+------+ That query by itself
  • 53. The 10 Best Restaurants of Different Cuisines The JSON_TABLE, CTE, and Windowing Function 53 This query uses JSON_TABLE to structure the schema-less data within a CTE and then the CTE is queried to get the top 10 restaurants with a Windowing Function WITH cte1 AS (SELECT doc->>"$.name" AS name, doc->>"$.cuisine" AS cuisine, (SELECT AVG(score) FROM JSON_TABLE(doc, "$.grades[*]" COLUMNS (score INT PATH "$.score")) AS r) AS avg_score FROM restaurants) SELECT *, RANK() OVER (PARTITION BY cuisine ORDER BY avg_score DESC) AS `rank` FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10;
  • 54. Download Today https://dev.mysql.com/downloads/mysql/ Or Docker images -> https://hub.docker.com/_/mysql/ 54
  • 55. The Unofficial MySQL 8 Optimizer Guide 55 http://www.unofficialmysqlguide.com/ Server Architecture B+tree indexes Explain Optimizer Trace Logical Transformations Example Transformations Cost-based Optimization Hints Comparing Plans Composite Indexes Covering Indexes Visual Explain Transient Plans Subqueries CTEs and Views Joins Aggregation Sorting Partitioning Query Rewrite Invisible Indexes Profiling Queries JSON and Generated Columns Character Sets
  • 57. MySQL Group Replication MySQL 5.7 or later 57 MySQL Group Replication is a MySQL Server plugin that enables you to create elastic, highly-available, fault-tolerant replication topologies. There is a built-in group membership service that keeps the view of the group consistent and available for all servers at any given point in time. Servers can leave and join the group and the view is updated accordingly. Sometimes servers can leave the group unexpectedly, in which case the failure detection mechanism detects this and notifies the group that the view has changed. This is all automatic.
  • 58. We have gone About as far as we can for now! 58
  • 59. Buy My Book (please!) 59 What you need to know to use the MySQL JSON data type with lots of examples!