SlideShare uma empresa Scribd logo
1 de 25
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
JSON Support
in MySQL 5.7
Georgi “Joro” Kodinov
Team lead, MySQL server general team
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
2
 The new JSON data type
 Inlined JSON path expressions
 The new JSON functions
 Indexing JSON data
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
CREATE TABLE employees (data JSON);
INSERT INTO employees VALUES
('{"id": 1, "name": "Jane"}'),
('{"id": 2, "name": "Joe"}');
SELECT * FROM employees;
+-------------------------------------+
| data |
+-------------------------------------+
| {"id": 1, "name": "Jane"} |
| {"id": 2, "name": "Joe"} |
+-------------------------------------+
• Validation on INSERT
• No reparsing on SELECT
• Dictionary of fields
• Fields are sorted
• Can compare JSON/SQL
• Can convert JSON/SQL
• Supports all native JSON
datatypes
• Also supports date, time,
timestamp etc.
3
The New JSON Datatype
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
JSON vs TEXT columns
Pros Cons
JSON
• Validate once
• Fast access
• Can update in-place
• Slower to insert
• Unreadable as is
• Sets certain limitations on JSON
TEXT
• Fast to insert
• Human readable
• Requires manual validation
• Requires manual parsing
• Harder to update
4
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Beware: SQL vs JSON comparisons !
5
SQL JSON
create table t1 (data json); create table t2 (
id integer,
data varchar(20));
insert into t1 values
('{ "id": 1, "data": "1" }'),
('{ "id": 2, "data": "3" }');
insert into t2 values
(1, '1'),
(2, '3');
select count(*) from t1 where
data->'$.id' = data->'$.data';
select count(*) from t2 where
id = data;
0 rows ! 1 row !
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
6
 The new JSON data type
 Inlined JSON path expressions
 The new JSON functions
 Indexing JSON data
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Inlined JSON Path Expressions
• <field>->'<JSON path expression>'
e.g. data->'$.some.key[3].from.doc'
• Syntax sugar over JSON_EXTRACT function
• SELECT * FROM employees WHERE data->'$.id'= 2;
• ALTER … ADD COLUMN id INT AS (data->'$.id') …
• CREATE VIEW .. AS SELECT data->'$.id', data->'$.name' FROM …
• UPDATE employees SET data->'$.name'=‘John' WHERE …
Not
yet!
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Limitations of Inlined JSON Path Expressions
Inlined JSON path JSON_EXTRACT()
Data source Field Any JSON value
Path expression SQL Constant SQL Expression
# of expressions One Multiple
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Supported JSON Paths
[[[database.]table.]column]$<path spec>
Expression Example
[ [ [database.] table.] field]$ db.phonebook.data$
$ Current document’s root
$.identifier $.user.address.street
[array] $.user.addresses[2].street
.* and [*] $.user.addresses[*].street
** $.user**.phone
Not yet!
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
10
 The new JSON data type
 Inlined JSON path expressions
 The new JSON functions
 Indexing JSON data
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
New functions to handle JSON data
Example Result
SELECT JSON_VALID('{ "a":1 }'); 1
SELECT JSON_TYPE('[ 1, 2, 3 ]'); ARRAY
SELECT JSON_KEYS('{ "a":1, "b": 2 }'); ["a", "b"]
SELECT JSON_LENGTH('[ 1, 2, 3 ]'); 3
SELECT JSON_DEPTH('{ "a":{ "c": 1 }, "b": 2 }'); 3
11
Information
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
New functions to handle JSON data
Example Result
SELECT JSON_REMOVE('{ "a":1, "b": 2 }', '$.a'); {"b": 2}
SELECT JSON_ARRAY_APPEND('[1,[2,3],4]', '$[1]', 5); [1, [2, 3, 5], 4]
SELECT JSON_SET('{ "a":1 }', '$.c', 3); {"a": 1, “c": 3}
SELECT JSON_INSERT('{ "a":1 }', '$.b', 4); {"a": 1, "b": 4}
SELECT JSON_REPLACE('{ "a":1, "b": 2 }', '$.b', 3); {"a": 1, "b": 3}
SELECT JSON_MERGE('{ "a": 1 }', '{"b":2}'); {"a": 1, "b": 2}
SELECT JSON_UNQUOTE('"abc"'); abc
12
Modification
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
New functions to handle JSON data
Example Result
SELECT JSON_ARRAY(1, '2', null, true); [1, "2", null, true]
SELECT JSON_OBJECT(1, 2, '3', true); {"1": 2, "3": true}
SELECT JSON_QUOTE('"null"'); ""null""
13
Create JSON objects
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
New functions to handle JSON data
Example Result
SELECT JSON_CONTAINS_PATH(
'{ "a":{ "c": 1 }, "b": 2 }', 'one', '$.a.c');
1
SELECT JSON_CONTAINS( '{"a": 1, "b": "2" }', '1', '$.a'); 1
SELECT JSON_EXTRACT('{"a": 1, "n": { "b": 2}}', '$.n'); {"b": 2}
SELECT JSON_SEARCH( '{"a": "1", "b": "2" }', 'one', 2); "$.b"
14
Search in JSON data
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
New functions to handle JSON data
15
Further reading: http://dev.mysql.com/doc/refman/5.7/en/
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
16
 The new JSON data type
 Inlined JSON path expressions
 The new JSON functions
 Indexing JSON data
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Indexing JSON Data
• Use Functional Indexes
– Both STORED and VIRTUAL types are supported
• Examples:
– CREATE TABLE t1 (
data JSON,
id INTEGER AS (JSON_EXTRACT(data,"$.id")) STORED,
PRIMARY KEY(id));
– CREATE TABLE t2 (
data JSON,
id INTEGER AS (JSON_EXTRACT(data,"$.id")) VIRTUAL,
KEY(id));
17
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Indexing JSON: STORED vs VIRTUAL columns
Pros Cons
STORED
• Can be primary key too
• All index types supported
• Looks like a normal field
• Slow ALTER TABLE
• Takes space on disk
VIRTUAL
• Instant ALTER TABLE
• Faster INSERT
• Looks like a normal field
• Secondary key only
• BTREE index only
18
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
How do you tell if an JSON index is used ?
> EXPLAIN SELECT data FROM t1 WHERE JSON_EXTRACT(data,"$.series")
BETWEEN 3 AND 5;
+----+----------------+--------+---------------+--------+…+------------------------------+
| id | select_type | table | partitions | type | | Extra |
+----+----------------+--------+---------------+--------+…+------------------------------+
| 1 | SIMPLE | t1 | NULL | range | | Using index condition |
+----+----------------+--------+---------------+--------+…+------------------------------+
19
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Or this way ….
20
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Or maybe this way ?
21
ALTER TABLE features ADD feature_type VARCHAR(30) AS (feature->"$.type") VIRTUAL;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE features ADD INDEX (feature_type);
Query OK, 0 rows affected (0.73 sec)
Records: 0 Duplicates: 0 Warnings: 0
SELECT DISTINCT feature_type FROM features;
+-------------------+
| feature_type |
+-------------------+
| "Feature" |
+-------------------+
1 row in set (0.06 sec)
From table scan on 206K documents to index scan on 206K materialized values
Down from 1.25s !
Meta data change only (FAST).
Does not need to touch table.
Online CREATE INDEX !
No rows were
modified.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Roadmap
• Online alter for virtual columns
• Advanced JSON functions
• In-place update of JSON/BLOB
• Full text and GIS index on virtual columns
• Improved performance through condition pushdown
22
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Questions ?
@gkodinov, georgi.kodinov@oracle.com if you forget !
23
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Safe Harbor Statement
The preceding 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.
24
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 25

Mais conteúdo relacionado

Mais procurados

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 featuresGabriela Ferrara
 
CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...
CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...
CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...DataStax
 
The Ring programming language version 1.7 book - Part 31 of 196
The Ring programming language version 1.7 book - Part 31 of 196The Ring programming language version 1.7 book - Part 31 of 196
The Ring programming language version 1.7 book - Part 31 of 196Mahmoud Samir Fayed
 
Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0Scott Leberknight
 
Next Top Data Model by Ian Plosker
Next Top Data Model by Ian PloskerNext Top Data Model by Ian Plosker
Next Top Data Model by Ian PloskerSyncConf
 
The Ring programming language version 1.10 book - Part 36 of 212
The Ring programming language version 1.10 book - Part 36 of 212The Ring programming language version 1.10 book - Part 36 of 212
The Ring programming language version 1.10 book - Part 36 of 212Mahmoud Samir Fayed
 
Validating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationValidating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationDave 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
 
The Ring programming language version 1.5.1 book - Part 26 of 180
The Ring programming language version 1.5.1 book - Part 26 of 180The Ring programming language version 1.5.1 book - Part 26 of 180
The Ring programming language version 1.5.1 book - Part 26 of 180Mahmoud Samir Fayed
 
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
 
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
 
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 MySQLGabriela Ferrara
 
Json within a relational database
Json within a relational databaseJson within a relational database
Json within a relational databaseDave 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
 
Scaling MySQL Strategies for Developers
Scaling MySQL Strategies for DevelopersScaling MySQL Strategies for Developers
Scaling MySQL Strategies for DevelopersJonathan Levin
 

Mais procurados (20)

Cassandra 3.0
Cassandra 3.0Cassandra 3.0
Cassandra 3.0
 
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
 
CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...
CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...
CQL performance with Apache Cassandra 3.0 (Aaron Morton, The Last Pickle) | C...
 
Cassandra 2.2 & 3.0
Cassandra 2.2 & 3.0Cassandra 2.2 & 3.0
Cassandra 2.2 & 3.0
 
ROracle
ROracle ROracle
ROracle
 
The Ring programming language version 1.7 book - Part 31 of 196
The Ring programming language version 1.7 book - Part 31 of 196The Ring programming language version 1.7 book - Part 31 of 196
The Ring programming language version 1.7 book - Part 31 of 196
 
Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0
 
Next Top Data Model by Ian Plosker
Next Top Data Model by Ian PloskerNext Top Data Model by Ian Plosker
Next Top Data Model by Ian Plosker
 
The Ring programming language version 1.10 book - Part 36 of 212
The Ring programming language version 1.10 book - Part 36 of 212The Ring programming language version 1.10 book - Part 36 of 212
The Ring programming language version 1.10 book - Part 36 of 212
 
Validating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentationValidating JSON -- Percona Live 2021 presentation
Validating JSON -- Percona Live 2021 presentation
 
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
 
The Ring programming language version 1.5.1 book - Part 26 of 180
The Ring programming language version 1.5.1 book - Part 26 of 180The Ring programming language version 1.5.1 book - Part 26 of 180
The Ring programming language version 1.5.1 book - Part 26 of 180
 
Polyglot Persistence
Polyglot PersistencePolyglot Persistence
Polyglot Persistence
 
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!
 
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
 
My sql1
My sql1My sql1
My sql1
 
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
 
Json within a relational database
Json within a relational databaseJson within a relational database
Json within a relational database
 
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 ...
 
Scaling MySQL Strategies for Developers
Scaling MySQL Strategies for DevelopersScaling MySQL Strategies for Developers
Scaling MySQL Strategies for Developers
 

Destaque

Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Frederic Descamps
 
MariaDB - Fast, Easy & Strong - Get Started Tutorial
MariaDB - Fast, Easy & Strong - Get Started TutorialMariaDB - Fast, Easy & Strong - Get Started Tutorial
MariaDB - Fast, Easy & Strong - Get Started Tutorialphamhphuc
 
MySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise EditionMySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise EditionOlivier DASINI
 
ProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQLProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQLRené Cannaò
 
Proxysql use case scenarios fosdem17
Proxysql use case scenarios    fosdem17Proxysql use case scenarios    fosdem17
Proxysql use case scenarios fosdem17Alkin Tezuysal
 
MySQL Cloud Service Deep Dive
MySQL Cloud Service Deep DiveMySQL Cloud Service Deep Dive
MySQL Cloud Service Deep DiveMorgan Tocker
 
MySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMatt Lord
 
What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...Sveta Smirnova
 
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud ServiceMySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud ServiceOlivier DASINI
 

Destaque (9)

Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
 
MariaDB - Fast, Easy & Strong - Get Started Tutorial
MariaDB - Fast, Easy & Strong - Get Started TutorialMariaDB - Fast, Easy & Strong - Get Started Tutorial
MariaDB - Fast, Easy & Strong - Get Started Tutorial
 
MySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise EditionMySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise Edition
 
ProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQLProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQL
 
Proxysql use case scenarios fosdem17
Proxysql use case scenarios    fosdem17Proxysql use case scenarios    fosdem17
Proxysql use case scenarios fosdem17
 
MySQL Cloud Service Deep Dive
MySQL Cloud Service Deep DiveMySQL Cloud Service Deep Dive
MySQL Cloud Service Deep Dive
 
MySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB Clusters
 
What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...
 
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud ServiceMySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
 

Semelhante a BGOUG15: JSON support in MySQL 5.7

Optimizer percona live_ams2015
Optimizer percona live_ams2015Optimizer percona live_ams2015
Optimizer percona live_ams2015Manyi Lu
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용I Goo Lee
 
Modern query optimisation features in MySQL 8.
Modern query optimisation features in MySQL 8.Modern query optimisation features in MySQL 8.
Modern query optimisation features in MySQL 8.Mydbops
 
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 2015Dave Stokes
 
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 2015Dave Stokes
 
NoSQL для PostgreSQL: Jsquery — язык запросов
NoSQL для PostgreSQL: Jsquery — язык запросовNoSQL для PostgreSQL: Jsquery — язык запросов
NoSQL для PostgreSQL: Jsquery — язык запросовCodeFest
 
The rise of json in rdbms land jab17
The rise of json in rdbms land jab17The rise of json in rdbms land jab17
The rise of json in rdbms land jab17alikonweb
 
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...Ontico
 
Json improvements in my sql 8.0
Json improvements in my sql 8.0  Json improvements in my sql 8.0
Json improvements in my sql 8.0 Mysql User Camp
 
[OSC 2020 Online/Nagoya] MySQLドキュメントストア
[OSC 2020 Online/Nagoya] MySQLドキュメントストア[OSC 2020 Online/Nagoya] MySQLドキュメントストア
[OSC 2020 Online/Nagoya] MySQLドキュメントストアRyusuke Kajiyama
 
Starting with JSON Path Expressions in Oracle 12.1.0.2
Starting with JSON Path Expressions in Oracle 12.1.0.2Starting with JSON Path Expressions in Oracle 12.1.0.2
Starting with JSON Path Expressions in Oracle 12.1.0.2Marco Gralike
 
JSON improvements in MySQL 8.0
JSON improvements in MySQL 8.0JSON improvements in MySQL 8.0
JSON improvements in MySQL 8.0Mydbops
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQLJussi Pohjolainen
 
PostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and OperatorsPostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and OperatorsNicholas Kiraly
 
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_1mlraviol
 
Power JSON with PostgreSQL
Power JSON with PostgreSQLPower JSON with PostgreSQL
Power JSON with PostgreSQLEDB
 
Micro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateMicro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateKiev ALT.NET
 

Semelhante a BGOUG15: JSON support in MySQL 5.7 (20)

MySQL Rises with JSON Support
MySQL Rises with JSON SupportMySQL Rises with JSON Support
MySQL Rises with JSON Support
 
Optimizer percona live_ams2015
Optimizer percona live_ams2015Optimizer percona live_ams2015
Optimizer percona live_ams2015
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
 
MySQL 5.7 + JSON
MySQL 5.7 + JSONMySQL 5.7 + JSON
MySQL 5.7 + JSON
 
Modern query optimisation features in MySQL 8.
Modern query optimisation features in MySQL 8.Modern query optimisation features in MySQL 8.
Modern query optimisation features in MySQL 8.
 
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
 
NoSQL для PostgreSQL: Jsquery — язык запросов
NoSQL для PostgreSQL: Jsquery — язык запросовNoSQL для PostgreSQL: Jsquery — язык запросов
NoSQL для PostgreSQL: Jsquery — язык запросов
 
The rise of json in rdbms land jab17
The rise of json in rdbms land jab17The rise of json in rdbms land jab17
The rise of json in rdbms land jab17
 
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
 
Json improvements in my sql 8.0
Json improvements in my sql 8.0  Json improvements in my sql 8.0
Json improvements in my sql 8.0
 
[OSC 2020 Online/Nagoya] MySQLドキュメントストア
[OSC 2020 Online/Nagoya] MySQLドキュメントストア[OSC 2020 Online/Nagoya] MySQLドキュメントストア
[OSC 2020 Online/Nagoya] MySQLドキュメントストア
 
Starting with JSON Path Expressions in Oracle 12.1.0.2
Starting with JSON Path Expressions in Oracle 12.1.0.2Starting with JSON Path Expressions in Oracle 12.1.0.2
Starting with JSON Path Expressions in Oracle 12.1.0.2
 
JSON improvements in MySQL 8.0
JSON improvements in MySQL 8.0JSON improvements in MySQL 8.0
JSON improvements in MySQL 8.0
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQL
 
PostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and OperatorsPostgreSQL 9.4 JSON Types and Operators
PostgreSQL 9.4 JSON Types and Operators
 
How to Use JSON in MySQL Wrong
How to Use JSON in MySQL WrongHow to Use JSON in MySQL Wrong
How to Use JSON in MySQL Wrong
 
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
 
Power JSON with PostgreSQL
Power JSON with PostgreSQLPower JSON with PostgreSQL
Power JSON with PostgreSQL
 
Micro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateMicro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicate
 

Último

Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 

Último (20)

Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 

BGOUG15: JSON support in MySQL 5.7

  • 1. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | JSON Support in MySQL 5.7 Georgi “Joro” Kodinov Team lead, MySQL server general team
  • 2. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Agenda 2  The new JSON data type  Inlined JSON path expressions  The new JSON functions  Indexing JSON data
  • 3. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. CREATE TABLE employees (data JSON); INSERT INTO employees VALUES ('{"id": 1, "name": "Jane"}'), ('{"id": 2, "name": "Joe"}'); SELECT * FROM employees; +-------------------------------------+ | data | +-------------------------------------+ | {"id": 1, "name": "Jane"} | | {"id": 2, "name": "Joe"} | +-------------------------------------+ • Validation on INSERT • No reparsing on SELECT • Dictionary of fields • Fields are sorted • Can compare JSON/SQL • Can convert JSON/SQL • Supports all native JSON datatypes • Also supports date, time, timestamp etc. 3 The New JSON Datatype
  • 4. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. JSON vs TEXT columns Pros Cons JSON • Validate once • Fast access • Can update in-place • Slower to insert • Unreadable as is • Sets certain limitations on JSON TEXT • Fast to insert • Human readable • Requires manual validation • Requires manual parsing • Harder to update 4
  • 5. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Beware: SQL vs JSON comparisons ! 5 SQL JSON create table t1 (data json); create table t2 ( id integer, data varchar(20)); insert into t1 values ('{ "id": 1, "data": "1" }'), ('{ "id": 2, "data": "3" }'); insert into t2 values (1, '1'), (2, '3'); select count(*) from t1 where data->'$.id' = data->'$.data'; select count(*) from t2 where id = data; 0 rows ! 1 row !
  • 6. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Agenda 6  The new JSON data type  Inlined JSON path expressions  The new JSON functions  Indexing JSON data
  • 7. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Inlined JSON Path Expressions • <field>->'<JSON path expression>' e.g. data->'$.some.key[3].from.doc' • Syntax sugar over JSON_EXTRACT function • SELECT * FROM employees WHERE data->'$.id'= 2; • ALTER … ADD COLUMN id INT AS (data->'$.id') … • CREATE VIEW .. AS SELECT data->'$.id', data->'$.name' FROM … • UPDATE employees SET data->'$.name'=‘John' WHERE … Not yet!
  • 8. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Limitations of Inlined JSON Path Expressions Inlined JSON path JSON_EXTRACT() Data source Field Any JSON value Path expression SQL Constant SQL Expression # of expressions One Multiple
  • 9. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Supported JSON Paths [[[database.]table.]column]$<path spec> Expression Example [ [ [database.] table.] field]$ db.phonebook.data$ $ Current document’s root $.identifier $.user.address.street [array] $.user.addresses[2].street .* and [*] $.user.addresses[*].street ** $.user**.phone Not yet!
  • 10. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Agenda 10  The new JSON data type  Inlined JSON path expressions  The new JSON functions  Indexing JSON data
  • 11. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. New functions to handle JSON data Example Result SELECT JSON_VALID('{ "a":1 }'); 1 SELECT JSON_TYPE('[ 1, 2, 3 ]'); ARRAY SELECT JSON_KEYS('{ "a":1, "b": 2 }'); ["a", "b"] SELECT JSON_LENGTH('[ 1, 2, 3 ]'); 3 SELECT JSON_DEPTH('{ "a":{ "c": 1 }, "b": 2 }'); 3 11 Information
  • 12. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. New functions to handle JSON data Example Result SELECT JSON_REMOVE('{ "a":1, "b": 2 }', '$.a'); {"b": 2} SELECT JSON_ARRAY_APPEND('[1,[2,3],4]', '$[1]', 5); [1, [2, 3, 5], 4] SELECT JSON_SET('{ "a":1 }', '$.c', 3); {"a": 1, “c": 3} SELECT JSON_INSERT('{ "a":1 }', '$.b', 4); {"a": 1, "b": 4} SELECT JSON_REPLACE('{ "a":1, "b": 2 }', '$.b', 3); {"a": 1, "b": 3} SELECT JSON_MERGE('{ "a": 1 }', '{"b":2}'); {"a": 1, "b": 2} SELECT JSON_UNQUOTE('"abc"'); abc 12 Modification
  • 13. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. New functions to handle JSON data Example Result SELECT JSON_ARRAY(1, '2', null, true); [1, "2", null, true] SELECT JSON_OBJECT(1, 2, '3', true); {"1": 2, "3": true} SELECT JSON_QUOTE('"null"'); ""null"" 13 Create JSON objects
  • 14. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. New functions to handle JSON data Example Result SELECT JSON_CONTAINS_PATH( '{ "a":{ "c": 1 }, "b": 2 }', 'one', '$.a.c'); 1 SELECT JSON_CONTAINS( '{"a": 1, "b": "2" }', '1', '$.a'); 1 SELECT JSON_EXTRACT('{"a": 1, "n": { "b": 2}}', '$.n'); {"b": 2} SELECT JSON_SEARCH( '{"a": "1", "b": "2" }', 'one', 2); "$.b" 14 Search in JSON data
  • 15. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. New functions to handle JSON data 15 Further reading: http://dev.mysql.com/doc/refman/5.7/en/
  • 16. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Agenda 16  The new JSON data type  Inlined JSON path expressions  The new JSON functions  Indexing JSON data
  • 17. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Indexing JSON Data • Use Functional Indexes – Both STORED and VIRTUAL types are supported • Examples: – CREATE TABLE t1 ( data JSON, id INTEGER AS (JSON_EXTRACT(data,"$.id")) STORED, PRIMARY KEY(id)); – CREATE TABLE t2 ( data JSON, id INTEGER AS (JSON_EXTRACT(data,"$.id")) VIRTUAL, KEY(id)); 17
  • 18. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Indexing JSON: STORED vs VIRTUAL columns Pros Cons STORED • Can be primary key too • All index types supported • Looks like a normal field • Slow ALTER TABLE • Takes space on disk VIRTUAL • Instant ALTER TABLE • Faster INSERT • Looks like a normal field • Secondary key only • BTREE index only 18
  • 19. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. How do you tell if an JSON index is used ? > EXPLAIN SELECT data FROM t1 WHERE JSON_EXTRACT(data,"$.series") BETWEEN 3 AND 5; +----+----------------+--------+---------------+--------+…+------------------------------+ | id | select_type | table | partitions | type | | Extra | +----+----------------+--------+---------------+--------+…+------------------------------+ | 1 | SIMPLE | t1 | NULL | range | | Using index condition | +----+----------------+--------+---------------+--------+…+------------------------------+ 19
  • 20. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Or this way …. 20
  • 21. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Or maybe this way ? 21 ALTER TABLE features ADD feature_type VARCHAR(30) AS (feature->"$.type") VIRTUAL; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 ALTER TABLE features ADD INDEX (feature_type); Query OK, 0 rows affected (0.73 sec) Records: 0 Duplicates: 0 Warnings: 0 SELECT DISTINCT feature_type FROM features; +-------------------+ | feature_type | +-------------------+ | "Feature" | +-------------------+ 1 row in set (0.06 sec) From table scan on 206K documents to index scan on 206K materialized values Down from 1.25s ! Meta data change only (FAST). Does not need to touch table. Online CREATE INDEX ! No rows were modified.
  • 22. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Roadmap • Online alter for virtual columns • Advanced JSON functions • In-place update of JSON/BLOB • Full text and GIS index on virtual columns • Improved performance through condition pushdown 22
  • 23. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Questions ? @gkodinov, georgi.kodinov@oracle.com if you forget ! 23
  • 24. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement The preceding 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. 24
  • 25. Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 25

Notas do Editor

  1. Create an index on type field, first create a virtual column by extracting the type field, and then create an index on this virtual column. Run the same query as before. Execution time goes 1.25 sec down to 0.06 sec. Still has to examine full index, but now it is just an index of the values all extracted. It is much smaller.