Type:
Task
Priority:
Critical
Resolution:
Fixed
Support EXPLAIN FORMAT=JSON like MySQL 5.6 does.
Difference from MySQL's EXPLAIN FORMAT=JSON
We don't want to copy MySQL 5.6:
From the user point of view:
5.6 output format is not documented and unstable (even MySQL Workbench fails to parse it in some cases)
I don't expect that any 3rd party is able to parse it, other than relying that it's a well-formed JSON document.
5.6 output format doesn't allow to display some info we want to display
5.6's output format has legacy of tabular output format in many places
MariaDB has more optimizer features, so we will have to produce output that 5.6 never produces
Currently supported
Basic SELECTs
Table access methods
full table/index scans
range access
index_merge access
I_S read optimizations
"Using where" (attached_condition)
rows and 'filtered' columns
Index Condition Pushdown ('index_condition')
UNIONs (incomplete)
Item-based subqueries (incomplete)
Basic join buffering
Single-table UPDATE/DELETE
Derived tables
Non-merged semi-joins (JTBMs)
[Merged] Semi-joins: SJ-Materialization
[Merged] Semi-joins: FirstMatch, DuplicateElimination, LooseScan
Not yet supported (important)
ORDER BY/GROUP BY/ DISTINCT handling – as agreed won't be ready before 10.1.2
Not yet supported (less important)
Subquery cache feature
Advanced join buffering (display MRR as a special kind of scan)
{"report":{"fcp":1015.4000000357628,"ttfb":249.4000000357628,"pageVisibility":"visible","entityId":35125,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0.5,"journeyId":"9d82911e-f9a6-4809-9dee-aa3cbb171668","navigationType":0,"readyForUser":1118.6000000238419,"redirectCount":0,"resourceLoadedEnd":757.6000000238419,"resourceLoadedStart":254.5,"resourceTiming":[{"duration":272.30000001192093,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2bv2/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":254.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":254.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":526.8000000119209,"responseStart":0,"secureConnectionStart":0},{"duration":272.4000000357628,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2bv2/820016/12ta74/2380add21a9a1006587582385952de73/_/download/contextbatch/css/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":254.69999998807907,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":254.69999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":527.1000000238419,"responseStart":0,"secureConnectionStart":0},{"duration":284.69999998807907,"initiatorType":"script","name":"https://jira.mariadb.org/s/e9b27a47da5fb0f74a35acd57e9847fb-CDN/lu2bv2/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":254.9000000357628,"connectEnd":254.9000000357628,"connectStart":254.9000000357628,"domainLookupEnd":254.9000000357628,"domainLookupStart":254.9000000357628,"fetchStart":254.9000000357628,"redirectEnd":0,"redirectStart":0,"requestStart":254.9000000357628,"responseEnd":539.6000000238419,"responseStart":539.6000000238419,"secureConnectionStart":254.9000000357628},{"duration":392.2000000476837,"initiatorType":"script","name":"https://jira.mariadb.org/s/c32eb0da7ad9831253f8397e6cc26afd-CDN/lu2bv2/820016/12ta74/2380add21a9a1006587582385952de73/_/download/contextbatch/js/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":255.19999998807907,"connectEnd":255.19999998807907,"connectStart":255.19999998807907,"domainLookupEnd":255.19999998807907,"domainLookupStart":255.19999998807907,"fetchStart":255.19999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":255.19999998807907,"responseEnd":647.4000000357628,"responseStart":647.4000000357628,"secureConnectionStart":255.19999998807907},{"duration":395.89999997615814,"initiatorType":"script","name":"https://jira.mariadb.org/s/bc0bcb146314416123c992714ee00ff7-CDN/lu2bv2/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":255.4000000357628,"connectEnd":255.4000000357628,"connectStart":255.4000000357628,"domainLookupEnd":255.4000000357628,"domainLookupStart":255.4000000357628,"fetchStart":255.4000000357628,"redirectEnd":0,"redirectStart":0,"requestStart":255.4000000357628,"responseEnd":651.3000000119209,"responseStart":651.3000000119209,"secureConnectionStart":255.4000000357628},{"duration":396.30000001192093,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":255.5,"connectEnd":255.5,"connectStart":255.5,"domainLookupEnd":255.5,"domainLookupStart":255.5,"fetchStart":255.5,"redirectEnd":0,"redirectStart":0,"requestStart":255.5,"responseEnd":651.8000000119209,"responseStart":651.8000000119209,"secureConnectionStart":255.5},{"duration":396.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":255.60000002384186,"connectEnd":255.60000002384186,"connectStart":255.60000002384186,"domainLookupEnd":255.60000002384186,"domainLookupStart":255.60000002384186,"fetchStart":255.60000002384186,"redirectEnd":0,"redirectStart":0,"requestStart":255.60000002384186,"responseEnd":652.1000000238419,"responseStart":652.1000000238419,"secureConnectionStart":255.60000002384186},{"duration":433.69999998807907,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2bv2/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":255.9000000357628,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":255.9000000357628,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":689.6000000238419,"responseStart":0,"secureConnectionStart":0},{"duration":396.60000002384186,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":256,"connectEnd":256,"connectStart":256,"domainLookupEnd":256,"domainLookupStart":256,"fetchStart":256,"redirectEnd":0,"redirectStart":0,"requestStart":256,"responseEnd":652.6000000238419,"responseStart":652.6000000238419,"secureConnectionStart":256},{"duration":433.60000002384186,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2bv2/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.css?jira.create.linked.issue=true","startTime":256.19999998807907,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":256.19999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":689.8000000119209,"responseStart":0,"secureConnectionStart":0},{"duration":397.0999999642372,"initiatorType":"script","name":"https://jira.mariadb.org/s/719848dd97ebe0663199f49a3936487a-CDN/lu2bv2/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.js?jira.create.linked.issue=true&locale=en","startTime":256.4000000357628,"connectEnd":256.4000000357628,"connectStart":256.4000000357628,"domainLookupEnd":256.4000000357628,"domainLookupStart":256.4000000357628,"fetchStart":256.4000000357628,"redirectEnd":0,"redirectStart":0,"requestStart":256.4000000357628,"responseEnd":653.5,"responseStart":653.5,"secureConnectionStart":256.4000000357628},{"duration":473.30000001192093,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":263.80000001192093,"connectEnd":263.80000001192093,"connectStart":263.80000001192093,"domainLookupEnd":263.80000001192093,"domainLookupStart":263.80000001192093,"fetchStart":263.80000001192093,"redirectEnd":0,"redirectStart":0,"requestStart":263.80000001192093,"responseEnd":737.1000000238419,"responseStart":737.1000000238419,"secureConnectionStart":263.80000001192093},{"duration":490.30000001192093,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":267.30000001192093,"connectEnd":267.30000001192093,"connectStart":267.30000001192093,"domainLookupEnd":267.30000001192093,"domainLookupStart":267.30000001192093,"fetchStart":267.30000001192093,"redirectEnd":0,"redirectStart":0,"requestStart":267.30000001192093,"responseEnd":757.6000000238419,"responseStart":757.5,"secureConnectionStart":267.30000001192093},{"duration":33.19999998807907,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":705.3000000119209,"connectEnd":705.3000000119209,"connectStart":705.3000000119209,"domainLookupEnd":705.3000000119209,"domainLookupStart":705.3000000119209,"fetchStart":705.3000000119209,"redirectEnd":0,"redirectStart":0,"requestStart":705.3000000119209,"responseEnd":738.5,"responseStart":738.5,"secureConnectionStart":705.3000000119209},{"duration":493.60000002384186,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/e65b778d185daf5aee24936755b43da6/_/download/contextbatch/js/browser-metrics-plugin.contrib,-_super,-project.issue.navigator,-jira.view.issue,-atl.general/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":741.8000000119209,"connectEnd":741.8000000119209,"connectStart":741.8000000119209,"domainLookupEnd":741.8000000119209,"domainLookupStart":741.8000000119209,"fetchStart":741.8000000119209,"redirectEnd":0,"redirectStart":0,"requestStart":741.8000000119209,"responseEnd":1235.4000000357628,"responseStart":1235.4000000357628,"secureConnectionStart":741.8000000119209}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":76,"responseStart":250,"responseEnd":267,"domLoading":253,"domInteractive":1221,"domContentLoadedEventStart":1221,"domContentLoadedEventEnd":1287,"domComplete":1711,"loadEventStart":1711,"loadEventEnd":1712,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1194.6000000238419},{"name":"bigPipe.sidebar-id.end","time":1195.5},{"name":"bigPipe.activity-panel-pipe-id.start","time":1195.699999988079},{"name":"bigPipe.activity-panel-pipe-id.end","time":1198},{"name":"activityTabFullyLoaded","time":1306.1000000238419}],"measures":[],"correlationId":"49af2e80281549","effectiveType":"4g","downlink":9.4,"rtt":0,"serverDuration":116,"dbReadsTimeInMs":19,"dbConnsTimeInMs":28,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
How MySQL-5.6 displays semi-join subquery plans:
FirstMatch:
"table" : { .... ,"first_match" : "other_table", ... }
Duplicate Elimination:
"duplicates_removal": {
"using_temporary_table": true,
"nested_loop": [ ... tables are here ]
}
SJ-Materialization looks barely distinguishable from derived table:
"table": {
"table_name": "<subquery2>",
"access_type": "ALL",
"materialized_from_subquery": {
"using_temporary_table": true,
"query_block": {
... suquery goes here
}
}
LooseScan
The table being scanned has:
"loosescan": true,