SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
OMG MySQL 8.0 is out! Are
we there yet?
Gabriela Ferrara
@gabidavila
http://gabriela.io | gabi.fyi/feedback
@gabidavila
Gabi
!
Developer Advocate
@gabidavila
Cloud SQL
PostgreSQLMySQL
@gabidavila
MySQL 8.0.12
@gabidavila
Are we there yet?
🤔
● Created to handle from up to
10 to 100M rows or around
100MB/table
● Now supports terabyte-sized
databases
● Supports parts of SQL
standards as new as SQL 2016
● But... some stuff from SQL
2003 just became available
(Window Functions, CTEs)
● What can we go from here?
@gabidavila
What Happened to 6.0 and 7.0?
@gabidavila
Topics
● New Defaults & Variables
● InnoDB Performance
● Window Functions
● CTE - Common Table Expressions
@gabidavila
New Defaults & Variables
@gabidavila
New default Charset
● Default:
● 5.7: latin1
● 8.0: utf8mb4
● Improvements:
● ➕ Mathematical Equations 𝑒=𝑚·𝑐²
● 😁 🙄 &
● & more SMP (Supplementary Multilingual Plane) Characters
@gabidavila
New default Collation
● utf8mb4_0900_ai_ci
● UTF-8 version 9.0 support
● Accent Insensitive
● Case Insensitive
● No more 🍣 = 🍺 bug
● Caused by utf8mb4_general_ci or utf8mb4_unicode_ci
More information on how collations behave here.
@gabidavila
Other defaults & variables
● Binary log (log_bin) is enabled by default
● SHA-2 for authentication
● Mandatory default value for TIMESTAMP NOT NULL
● New variable to dedicated servers (default OFF),
innodb_dedicated_server=ON , controls dynamically:
● innodb_buffer_pool_size
● innodb_log_file_size
● innodb_flush_method
@gabidavila
InnoDB Performance
@gabidavila
Transaction Scheduling
RDBMS usually works on a FIFO architecture
Transaction A
Transaction B
Transaction C
Start
End
@gabidavila
CATS
First database in the world to
implement
@gabidavila
Contention Aware Transaction Scheduling
@gabidavila
CATS vs FIFO | Transactions per Second (TPS)
0
5500
11000
16500
22000
32 64 128 256 512
FIFO CATS
DataextractedfromMySQLServerTeamwebsite.
Transactions per Second x # Clients
Higher is better
@gabidavila
CATS vs FIFO | Latency
0
45
90
135
180
32 64 128 256 512
FIFO CATS
DataextractedfromMySQLServerTeamwebsite.
Mean Latency x # Clients
Lower is better
@gabidavila
ALGORITHM=INSTANT
● If possible, the default is INSTANT, else it will be INPLACE
● Only metadata changed on the Data Dictionary
● Supported on:
● Change index
● Rename Table
● SET/DROP DEFAULT
● MODIFY COLUMN
● ADD/DROP Virtual Columns
● ADD COLUMN (non-generated)
🐞 Tiny bug if you are migrating from 8.0.11
@gabidavila
Indexes
@gabidavila
DESCRIBE `lines`;
type null extra
id int(11) NO AUTO_INCREMENT
number int(11) YES
timpestamp_in_ms timestamp YES
character_id int(11) NO
episode_id int(11) NO
location_id int(11) NO
character_line text YES
word_count int(11) YES
@gabidavila
Invisible Indexes
● Not used by the optimizer
● Visible by default, to create an invisible index:
ALTER TABLE lines
ADD INDEX ix_word_count (word_count) INVISIBLE;
ALTER TABLE lines ALTER INDEX ix_word_count INVISIBLE;
ALTER TABLE lines ALTER INDEX ix_word_count VISIBLE;
● Toggle visibility:
@gabidavila
Now imagine if an Eloquent migration…
@gabidavila
Could do…
@gabidavila
Laravel
Taylor will be waiting your pull request!
@gabidavila
Invisible Indexes
SELECT *
FROM lines
WHERE word_count > 25
ORDER BY word_count DESC;
Invisible
Query cost: 59175.37
Visible
Query cost: 2847.86
@gabidavila
Descending Indexes
Up to 5.7
● Syntax allowed ASC or DESC when defining an index
However...
An index_col_name specification can end with ASC or DESC. These keywords are
permitted for future extensions for specifying ascending or descending index value
storage. Currently, they are parsed but ignored; index values are always stored in
ascending order.
@gabidavila
MySQL 8.0 has it!!!
@gabidavila
Descending Indexes
● No longer ignored and forcibly created as ASC
ALTER TABLE lines
ADD INDEX ix_word_count (word_count DESC);
@gabidavila
Descending Indexes
Can be scanned as intended or backwards
SELECT *
FROM lines
WHERE word_count > 25
ORDER BY word_count DESC;
-- OR WITH THE SAME COST
SELECT *
FROM lines
WHERE word_count > 25
ORDER BY word_count;
@gabidavila
DEMO
@gabidavila
More cool features!
@gabidavila
Window Functions
@gabidavila
What they do?
● Allows to analyze the rows of a given result set
● Can behave like a GROUP BY without changing the result set
● Allows you to use a frame to "peek" OVER a PARTITION of a window
@gabidavila
Window Functions
● Examples:
● Enumerate rows - ROW_NUMBER()
● Show Aggregated sums - SUM()
● Rank results - RANK(), DENSE_RANK()
● Look at neighboring rows - LEAD(), LAG()
@gabidavila
DESCRIBE `episodes`;
CREATE TABLE `episodes` (
`id` int(11) NOT NULL,
`title` varchar(255),
`episode_date` date,
`season` int(11),
`number_in_season` int(11),
`number_in_series` int(11),
`million_viewers` decimal(10, 2),
`imdb_rating` decimal(10, 2),
`imdb_votes` decimal(10, 2),
`image_url` text,
`video_url` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
@gabidavila
SELECT … FROM `episodes` LIMIT 10;
+----+--------------+-----------------------------------+--------+------------------+-----------------+
| id | episode_date | title | season | number_in_season | million_viewers |
+----+--------------+-----------------------------------+--------+------------------+-----------------+
| 1 | 1989-12-17 | Simpsons Roasting on an Open Fire | 1 | 1 | 26.70 |
| 2 | 1990-01-14 | Bart the Genius | 1 | 2 | 24.50 |
| 3 | 1990-01-21 | Homer's Odyssey | 1 | 3 | 27.50 |
| 4 | 1990-01-28 | There's No Disgrace Like Home | 1 | 4 | 20.20 |
| 5 | 1990-02-04 | Bart the General | 1 | 5 | 27.10 |
| 6 | 1990-02-11 | Moaning Lisa | 1 | 6 | 27.40 |
| 7 | 1990-02-18 | The Call of the Simpsons | 1 | 7 | 27.60 |
| 8 | 1990-02-25 | The Telltale Head | 1 | 8 | 28.00 |
| 9 | 1990-03-18 | Life on the Fast Lane | 1 | 9 | 33.50 |
| 10 | 1990-03-25 | Homer's Night Out | 1 | 10 | 30.30 |
+----+--------------+-----------------------------------+--------+------------------+-----------------+
10 rows in set (0.00 sec)
@gabidavila
Previous and Next episodes | LAG and LEAD
SELECT
id,
title,
LAG(episode_date, 1) OVER (ORDER BY episode_date) AS previous_episode,
episode_date,
LEAD(episode_date, 1) OVER (ORDER BY episode_date) AS next_episode,
million_viewers
FROM episodes;
@gabidavila
SELECT … FROM `episodes` LIMIT 10;
+----+-----------------------------------+------------------+--------------+--------------+-----------------+
| id | title | previous_episode | episode_date | next_episode | million_viewers |
+----+-----------------------------------+------------------+--------------+--------------+-----------------+
| 1 | Simpsons Roasting on an Open Fire | NULL | 1989-12-17 | 1990-01-14 | 26.70 |
| 2 | Bart the Genius | 1989-12-17 | 1990-01-14 | 1990-01-21 | 24.50 |
| 3 | Homer's Odyssey | 1990-01-14 | 1990-01-21 | 1990-01-28 | 27.50 |
| 4 | There's No Disgrace Like Home | 1990-01-21 | 1990-01-28 | 1990-02-04 | 20.20 |
| 5 | Bart the General | 1990-01-28 | 1990-02-04 | 1990-02-11 | 27.10 |
| 6 | Moaning Lisa | 1990-02-04 | 1990-02-11 | 1990-02-18 | 27.40 |
| 7 | The Call of the Simpsons | 1990-02-11 | 1990-02-18 | 1990-02-25 | 27.60 |
| 8 | The Telltale Head | 1990-02-18 | 1990-02-25 | 1990-03-18 | 28.00 |
| 9 | Life on the Fast Lane | 1990-02-25 | 1990-03-18 | 1990-03-25 | 33.50 |
| 10 | Homer's Night Out | 1990-03-18 | 1990-03-25 | 1990-04-15 | 30.30 |
+----+-----------------------------------+------------------+--------------+--------------+-----------------+
10 rows in set (0.01 sec)
@gabidavila
Break down
LAG(episode_date, 1) OVER (ORDER BY episode_date)
windowfunction
column
# rows preceding
@gabidavila
Repetition?
SELECT
id,
title,
LAG(episode_date, 1) OVER (ORDER BY episode_date) AS previous_episode,
episode_date,
LEAD(episode_date, 1) OVER (ORDER BY episode_date) AS next_episode,
million_viewers
FROM episodes;
@gabidavila
SELECT
id,
title,
LAG(episode_date, 1) OVER (dates) AS previous_episode,
episode_date,
LEAD(episode_date, 1) OVER (dates) AS next_episode,
million_viewers
FROM episodes
WINDOW dates AS (ORDER BY episode_date);
Named Windows!
@gabidavila
DEMO
Rank episodes by million_viewers
@gabidavila
CTE

Common Table Expressions
@gabidavila
Common Table Expressions
● Similar to CREATE [TEMPORARY] TABLE
● Doesn’t need CREATE privilege
● Can reference other CTEs (if those are already defined)
● Can be recursive
● Easier to read
@gabidavila
Rank episodes by million_viewers
SELECT
id,
season,
number_in_season AS '# in season',
title,
episode_date,
million_viewers,
DENSE_RANK() OVER (season_viewers) AS episode_rank
FROM episodes
WINDOW season_viewers
AS (PARTITION BY season ORDER BY million_viewers DESC)
@gabidavila
DEMO
Filter ranked episodes
@gabidavila
Recursive CTE
● Useful with hierarchical data
● The Recipe is:
● Base query comes first
● Second query comes after a UNION statement
● And the stop condition should be on the recursive call
@gabidavila
Fibonacci
WITH RECURSIVE fibonacci(recursion_level, fibonacci_number, next_number)
AS (
# Base Case
SELECT 0 AS recursion_level,
0 AS fibonacci_number,
1 AS next_number
UNION ALL
# Recursion query
SELECT recursion_level + 1,
next_number,
fibonacci_number + next_number
FROM fibonacci
# Stopping condition
WHERE
recursion_level < 10
)
SELECT * FROM fibonacci;
@gabidavila
Fibonacci
WITH RECURSIVE fibonacci(recursion_level, fibonacci_number, next_number)
AS (
# Base Case
SELECT 0 AS recursion_level,
0 AS fibonacci_number,
1 AS next_number
UNION ALL
# Recursion query
SELECT recursion_level + 1,
next_number,
fibonacci_number + next_number
FROM fibonacci
# Stopping condition
WHERE
recursion_level < 10
)
SELECT * FROM fibonacci;
@gabidavila
Fibonacci
+-----------------+------------------+-------------+
| recursion_level | fibonacci_number | next_number |
+-----------------+------------------+-------------+
| 0 | 0 | 1 |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 3 | 5 |
| 5 | 5 | 8 |
| 6 | 8 | 13 |
| 7 | 13 | 21 |
| 8 | 21 | 34 |
| 9 | 34 | 55 |
| 10 | 55 | 89 |
+-----------------+------------------+-------------+
11 rows in set (0.00 sec)
Base case
Recursive Query
@gabidavila
Other Bits
@gabidavila
Other MySQL 8.0 Bits
● Users now can have ROLES
● JSON partial update
● Better Geospatial support
● Better UUID support
● Use MySQL without SQL (through MySQL Shell or X-DevApi)
@gabidavila
Thank you!
Please give me feedback on my talk!
gabi.fyi/feedback

Más contenido relacionado

La actualidad más candente

Building Smart Async Functions For Mobile
Building Smart Async Functions For MobileBuilding Smart Async Functions For Mobile
Building Smart Async Functions For Mobile
Glan Thomas
 

La actualidad más candente (10)

The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015
 
Building a Hierarchical Data Model Using the Latest IBM Informix Features
Building a Hierarchical Data Model Using the Latest IBM Informix FeaturesBuilding a Hierarchical Data Model Using the Latest IBM Informix Features
Building a Hierarchical Data Model Using the Latest IBM Informix Features
 
Java script advance-auroskills (2)
Java script advance-auroskills (2)Java script advance-auroskills (2)
Java script advance-auroskills (2)
 
Simplifying SQL with CTE's and windowing functions
Simplifying SQL with CTE's and windowing functionsSimplifying SQL with CTE's and windowing functions
Simplifying SQL with CTE's and windowing functions
 
Sql 99 and_some_techniques
Sql 99 and_some_techniquesSql 99 and_some_techniques
Sql 99 and_some_techniques
 
Building Smart Async Functions For Mobile
Building Smart Async Functions For MobileBuilding Smart Async Functions For Mobile
Building Smart Async Functions For Mobile
 
Java script – basic auroskills (2)
Java script – basic   auroskills (2)Java script – basic   auroskills (2)
Java script – basic auroskills (2)
 
Session #4: Treating Databases as First-Class Citizens in Development
Session #4: Treating Databases as First-Class Citizens in DevelopmentSession #4: Treating Databases as First-Class Citizens in Development
Session #4: Treating Databases as First-Class Citizens in Development
 
The Ring programming language version 1.5.4 book - Part 181 of 185
The Ring programming language version 1.5.4 book - Part 181 of 185The Ring programming language version 1.5.4 book - Part 181 of 185
The Ring programming language version 1.5.4 book - Part 181 of 185
 
Mcs011 solved assignment by divya singh
Mcs011 solved assignment by divya singhMcs011 solved assignment by divya singh
Mcs011 solved assignment by divya singh
 

Similar a Laracon EU 2018: OMG MySQL 8.0 is out! are we there yet?

New Features of SQL Server 2016
New Features of SQL Server 2016New Features of SQL Server 2016
New Features of SQL Server 2016
Mir Mahmood
 

Similar a Laracon EU 2018: OMG MySQL 8.0 is out! are we there yet? (20)

DPC18 - OMG MySQL 8.0 is out! are we there yet?
DPC18 - OMG MySQL 8.0 is out! are we there yet?DPC18 - OMG MySQL 8.0 is out! are we there yet?
DPC18 - OMG MySQL 8.0 is out! are we there yet?
 
MySQL 8.0: not only good, it’s GREAT! - PHP UK 2019
MySQL 8.0: not only good, it’s GREAT! - PHP UK 2019MySQL 8.0: not only good, it’s GREAT! - PHP UK 2019
MySQL 8.0: not only good, it’s GREAT! - PHP UK 2019
 
GRONINGEN PHP - MySQL 8.0 , not only good, great
GRONINGEN PHP - MySQL 8.0 , not only good, greatGRONINGEN PHP - MySQL 8.0 , not only good, great
GRONINGEN PHP - MySQL 8.0 , not only good, great
 
Diving into MySQL 5.7: advanced features
Diving into MySQL 5.7: advanced featuresDiving into MySQL 5.7: advanced features
Diving into MySQL 5.7: advanced features
 
Advanced MariaDB features that developers love.pdf
Advanced MariaDB features that developers love.pdfAdvanced MariaDB features that developers love.pdf
Advanced MariaDB features that developers love.pdf
 
PHPDay 2019 - MySQL 8, not only good, great!
PHPDay 2019 - MySQL 8, not only good, great!PHPDay 2019 - MySQL 8, not only good, great!
PHPDay 2019 - MySQL 8, not only good, great!
 
Love Your Database Railsconf 2017
Love Your Database Railsconf 2017Love Your Database Railsconf 2017
Love Your Database Railsconf 2017
 
Changing your huge table's data types in production
Changing your huge table's data types in productionChanging your huge table's data types in production
Changing your huge table's data types in production
 
Really Big Elephants: PostgreSQL DW
Really Big Elephants: PostgreSQL DWReally Big Elephants: PostgreSQL DW
Really Big Elephants: PostgreSQL DW
 
MariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsMariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAs
 
Recent MariaDB features to learn for a happy life
Recent MariaDB features to learn for a happy lifeRecent MariaDB features to learn for a happy life
Recent MariaDB features to learn for a happy life
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
 
MySQL 5.7 Tutorial Dutch PHP Conference 2015
MySQL 5.7 Tutorial Dutch PHP Conference 2015MySQL 5.7 Tutorial Dutch PHP Conference 2015
MySQL 5.7 Tutorial Dutch PHP Conference 2015
 
MySQL 5.7. Tutorial - Dutch PHP Conference 2015
MySQL 5.7. Tutorial - Dutch PHP Conference 2015MySQL 5.7. Tutorial - Dutch PHP Conference 2015
MySQL 5.7. Tutorial - Dutch PHP Conference 2015
 
Extensible Data Modeling
Extensible Data ModelingExtensible Data Modeling
Extensible Data Modeling
 
Cassandra 2.2 & 3.0
Cassandra 2.2 & 3.0Cassandra 2.2 & 3.0
Cassandra 2.2 & 3.0
 
PHP tips by a MYSQL DBA
PHP tips by a MYSQL DBAPHP tips by a MYSQL DBA
PHP tips by a MYSQL DBA
 
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
 
New Features of SQL Server 2016
New Features of SQL Server 2016New Features of SQL Server 2016
New Features of SQL Server 2016
 
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_103 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
 

Más de Gabriela Ferrara

Más de Gabriela Ferrara (16)

Serverless and you @ Women Who Code London 2020
Serverless and you  @ Women Who Code London 2020Serverless and you  @ Women Who Code London 2020
Serverless and you @ Women Who Code London 2020
 
Serverless and you - where do i run my stateless code
Serverless and you  - where do i run my stateless codeServerless and you  - where do i run my stateless code
Serverless and you - where do i run my stateless code
 
PyTexas - Machine learning APIs by Example
PyTexas - Machine learning APIs by ExamplePyTexas - Machine learning APIs by Example
PyTexas - Machine learning APIs by Example
 
DPC18 - Making the most out of MySQL
DPC18 - Making the most out of MySQLDPC18 - Making the most out of MySQL
DPC18 - Making the most out of MySQL
 
php[tek] - Making the most out of MySQL
php[tek] - Making the most out of MySQLphp[tek] - Making the most out of MySQL
php[tek] - Making the most out of MySQL
 
MySQL 8.0 Preview: What Is Coming?
MySQL 8.0 Preview: What Is Coming?MySQL 8.0 Preview: What Is Coming?
MySQL 8.0 Preview: What Is Coming?
 
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeLaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
 
SunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQLSunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQL
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo Proveito
 
Strip your TEXT fields - Exeter Web Feb/2016
Strip your TEXT fields - Exeter Web Feb/2016Strip your TEXT fields - Exeter Web Feb/2016
Strip your TEXT fields - Exeter Web Feb/2016
 
Strip your TEXT fields
Strip your TEXT fieldsStrip your TEXT fields
Strip your TEXT fields
 
Coding like a girl - DjangoCon
Coding like a girl - DjangoConCoding like a girl - DjangoCon
Coding like a girl - DjangoCon
 
LAMP: Desenvolvendo além do trivial
LAMP: Desenvolvendo além do trivialLAMP: Desenvolvendo além do trivial
LAMP: Desenvolvendo além do trivial
 
Database Wizardry for Legacy Applications
Database Wizardry for Legacy ApplicationsDatabase Wizardry for Legacy Applications
Database Wizardry for Legacy Applications
 
Coding like a girl - Youtube presentation
Coding like a girl - Youtube presentationCoding like a girl - Youtube presentation
Coding like a girl - Youtube presentation
 
Coding like a Girl
Coding like a GirlCoding like a Girl
Coding like a Girl
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Último (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

Laracon EU 2018: OMG MySQL 8.0 is out! are we there yet?

  • 1. OMG MySQL 8.0 is out! Are we there yet? Gabriela Ferrara @gabidavila http://gabriela.io | gabi.fyi/feedback
  • 5. @gabidavila Are we there yet? 🤔 ● Created to handle from up to 10 to 100M rows or around 100MB/table ● Now supports terabyte-sized databases ● Supports parts of SQL standards as new as SQL 2016 ● But... some stuff from SQL 2003 just became available (Window Functions, CTEs) ● What can we go from here?
  • 7. @gabidavila Topics ● New Defaults & Variables ● InnoDB Performance ● Window Functions ● CTE - Common Table Expressions
  • 9. @gabidavila New default Charset ● Default: ● 5.7: latin1 ● 8.0: utf8mb4 ● Improvements: ● ➕ Mathematical Equations 𝑒=𝑚·𝑐² ● 😁 🙄 & ● & more SMP (Supplementary Multilingual Plane) Characters
  • 10. @gabidavila New default Collation ● utf8mb4_0900_ai_ci ● UTF-8 version 9.0 support ● Accent Insensitive ● Case Insensitive ● No more 🍣 = 🍺 bug ● Caused by utf8mb4_general_ci or utf8mb4_unicode_ci More information on how collations behave here.
  • 11. @gabidavila Other defaults & variables ● Binary log (log_bin) is enabled by default ● SHA-2 for authentication ● Mandatory default value for TIMESTAMP NOT NULL ● New variable to dedicated servers (default OFF), innodb_dedicated_server=ON , controls dynamically: ● innodb_buffer_pool_size ● innodb_log_file_size ● innodb_flush_method
  • 13. @gabidavila Transaction Scheduling RDBMS usually works on a FIFO architecture Transaction A Transaction B Transaction C Start End
  • 14. @gabidavila CATS First database in the world to implement
  • 16. @gabidavila CATS vs FIFO | Transactions per Second (TPS) 0 5500 11000 16500 22000 32 64 128 256 512 FIFO CATS DataextractedfromMySQLServerTeamwebsite. Transactions per Second x # Clients Higher is better
  • 17. @gabidavila CATS vs FIFO | Latency 0 45 90 135 180 32 64 128 256 512 FIFO CATS DataextractedfromMySQLServerTeamwebsite. Mean Latency x # Clients Lower is better
  • 18. @gabidavila ALGORITHM=INSTANT ● If possible, the default is INSTANT, else it will be INPLACE ● Only metadata changed on the Data Dictionary ● Supported on: ● Change index ● Rename Table ● SET/DROP DEFAULT ● MODIFY COLUMN ● ADD/DROP Virtual Columns ● ADD COLUMN (non-generated) 🐞 Tiny bug if you are migrating from 8.0.11
  • 20. @gabidavila DESCRIBE `lines`; type null extra id int(11) NO AUTO_INCREMENT number int(11) YES timpestamp_in_ms timestamp YES character_id int(11) NO episode_id int(11) NO location_id int(11) NO character_line text YES word_count int(11) YES
  • 21. @gabidavila Invisible Indexes ● Not used by the optimizer ● Visible by default, to create an invisible index: ALTER TABLE lines ADD INDEX ix_word_count (word_count) INVISIBLE; ALTER TABLE lines ALTER INDEX ix_word_count INVISIBLE; ALTER TABLE lines ALTER INDEX ix_word_count VISIBLE; ● Toggle visibility:
  • 22. @gabidavila Now imagine if an Eloquent migration…
  • 24. @gabidavila Laravel Taylor will be waiting your pull request!
  • 25. @gabidavila Invisible Indexes SELECT * FROM lines WHERE word_count > 25 ORDER BY word_count DESC; Invisible Query cost: 59175.37 Visible Query cost: 2847.86
  • 26. @gabidavila Descending Indexes Up to 5.7 ● Syntax allowed ASC or DESC when defining an index However... An index_col_name specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.
  • 28. @gabidavila Descending Indexes ● No longer ignored and forcibly created as ASC ALTER TABLE lines ADD INDEX ix_word_count (word_count DESC);
  • 29. @gabidavila Descending Indexes Can be scanned as intended or backwards SELECT * FROM lines WHERE word_count > 25 ORDER BY word_count DESC; -- OR WITH THE SAME COST SELECT * FROM lines WHERE word_count > 25 ORDER BY word_count;
  • 33. @gabidavila What they do? ● Allows to analyze the rows of a given result set ● Can behave like a GROUP BY without changing the result set ● Allows you to use a frame to "peek" OVER a PARTITION of a window
  • 34. @gabidavila Window Functions ● Examples: ● Enumerate rows - ROW_NUMBER() ● Show Aggregated sums - SUM() ● Rank results - RANK(), DENSE_RANK() ● Look at neighboring rows - LEAD(), LAG()
  • 35. @gabidavila DESCRIBE `episodes`; CREATE TABLE `episodes` ( `id` int(11) NOT NULL, `title` varchar(255), `episode_date` date, `season` int(11), `number_in_season` int(11), `number_in_series` int(11), `million_viewers` decimal(10, 2), `imdb_rating` decimal(10, 2), `imdb_votes` decimal(10, 2), `image_url` text, `video_url` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 36. @gabidavila SELECT … FROM `episodes` LIMIT 10; +----+--------------+-----------------------------------+--------+------------------+-----------------+ | id | episode_date | title | season | number_in_season | million_viewers | +----+--------------+-----------------------------------+--------+------------------+-----------------+ | 1 | 1989-12-17 | Simpsons Roasting on an Open Fire | 1 | 1 | 26.70 | | 2 | 1990-01-14 | Bart the Genius | 1 | 2 | 24.50 | | 3 | 1990-01-21 | Homer's Odyssey | 1 | 3 | 27.50 | | 4 | 1990-01-28 | There's No Disgrace Like Home | 1 | 4 | 20.20 | | 5 | 1990-02-04 | Bart the General | 1 | 5 | 27.10 | | 6 | 1990-02-11 | Moaning Lisa | 1 | 6 | 27.40 | | 7 | 1990-02-18 | The Call of the Simpsons | 1 | 7 | 27.60 | | 8 | 1990-02-25 | The Telltale Head | 1 | 8 | 28.00 | | 9 | 1990-03-18 | Life on the Fast Lane | 1 | 9 | 33.50 | | 10 | 1990-03-25 | Homer's Night Out | 1 | 10 | 30.30 | +----+--------------+-----------------------------------+--------+------------------+-----------------+ 10 rows in set (0.00 sec)
  • 37. @gabidavila Previous and Next episodes | LAG and LEAD SELECT id, title, LAG(episode_date, 1) OVER (ORDER BY episode_date) AS previous_episode, episode_date, LEAD(episode_date, 1) OVER (ORDER BY episode_date) AS next_episode, million_viewers FROM episodes;
  • 38. @gabidavila SELECT … FROM `episodes` LIMIT 10; +----+-----------------------------------+------------------+--------------+--------------+-----------------+ | id | title | previous_episode | episode_date | next_episode | million_viewers | +----+-----------------------------------+------------------+--------------+--------------+-----------------+ | 1 | Simpsons Roasting on an Open Fire | NULL | 1989-12-17 | 1990-01-14 | 26.70 | | 2 | Bart the Genius | 1989-12-17 | 1990-01-14 | 1990-01-21 | 24.50 | | 3 | Homer's Odyssey | 1990-01-14 | 1990-01-21 | 1990-01-28 | 27.50 | | 4 | There's No Disgrace Like Home | 1990-01-21 | 1990-01-28 | 1990-02-04 | 20.20 | | 5 | Bart the General | 1990-01-28 | 1990-02-04 | 1990-02-11 | 27.10 | | 6 | Moaning Lisa | 1990-02-04 | 1990-02-11 | 1990-02-18 | 27.40 | | 7 | The Call of the Simpsons | 1990-02-11 | 1990-02-18 | 1990-02-25 | 27.60 | | 8 | The Telltale Head | 1990-02-18 | 1990-02-25 | 1990-03-18 | 28.00 | | 9 | Life on the Fast Lane | 1990-02-25 | 1990-03-18 | 1990-03-25 | 33.50 | | 10 | Homer's Night Out | 1990-03-18 | 1990-03-25 | 1990-04-15 | 30.30 | +----+-----------------------------------+------------------+--------------+--------------+-----------------+ 10 rows in set (0.01 sec)
  • 39. @gabidavila Break down LAG(episode_date, 1) OVER (ORDER BY episode_date) windowfunction column # rows preceding
  • 40. @gabidavila Repetition? SELECT id, title, LAG(episode_date, 1) OVER (ORDER BY episode_date) AS previous_episode, episode_date, LEAD(episode_date, 1) OVER (ORDER BY episode_date) AS next_episode, million_viewers FROM episodes;
  • 41. @gabidavila SELECT id, title, LAG(episode_date, 1) OVER (dates) AS previous_episode, episode_date, LEAD(episode_date, 1) OVER (dates) AS next_episode, million_viewers FROM episodes WINDOW dates AS (ORDER BY episode_date); Named Windows!
  • 44. @gabidavila Common Table Expressions ● Similar to CREATE [TEMPORARY] TABLE ● Doesn’t need CREATE privilege ● Can reference other CTEs (if those are already defined) ● Can be recursive ● Easier to read
  • 45. @gabidavila Rank episodes by million_viewers SELECT id, season, number_in_season AS '# in season', title, episode_date, million_viewers, DENSE_RANK() OVER (season_viewers) AS episode_rank FROM episodes WINDOW season_viewers AS (PARTITION BY season ORDER BY million_viewers DESC)
  • 47. @gabidavila Recursive CTE ● Useful with hierarchical data ● The Recipe is: ● Base query comes first ● Second query comes after a UNION statement ● And the stop condition should be on the recursive call
  • 48. @gabidavila Fibonacci WITH RECURSIVE fibonacci(recursion_level, fibonacci_number, next_number) AS ( # Base Case SELECT 0 AS recursion_level, 0 AS fibonacci_number, 1 AS next_number UNION ALL # Recursion query SELECT recursion_level + 1, next_number, fibonacci_number + next_number FROM fibonacci # Stopping condition WHERE recursion_level < 10 ) SELECT * FROM fibonacci;
  • 49. @gabidavila Fibonacci WITH RECURSIVE fibonacci(recursion_level, fibonacci_number, next_number) AS ( # Base Case SELECT 0 AS recursion_level, 0 AS fibonacci_number, 1 AS next_number UNION ALL # Recursion query SELECT recursion_level + 1, next_number, fibonacci_number + next_number FROM fibonacci # Stopping condition WHERE recursion_level < 10 ) SELECT * FROM fibonacci;
  • 50. @gabidavila Fibonacci +-----------------+------------------+-------------+ | recursion_level | fibonacci_number | next_number | +-----------------+------------------+-------------+ | 0 | 0 | 1 | | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 2 | 3 | | 4 | 3 | 5 | | 5 | 5 | 8 | | 6 | 8 | 13 | | 7 | 13 | 21 | | 8 | 21 | 34 | | 9 | 34 | 55 | | 10 | 55 | 89 | +-----------------+------------------+-------------+ 11 rows in set (0.00 sec) Base case Recursive Query
  • 52. @gabidavila Other MySQL 8.0 Bits ● Users now can have ROLES ● JSON partial update ● Better Geospatial support ● Better UUID support ● Use MySQL without SQL (through MySQL Shell or X-DevApi)
  • 53. @gabidavila Thank you! Please give me feedback on my talk! gabi.fyi/feedback