We've ported "filesort with small limit" optimization from mysql-5.6 into MariaDB 10.0.
The problem is, it is impossible to see whether that optimization is used or not.
In MySQL, one can check this as follows
- set optimizer_trace=1
- SELECT // need to run SELECT, not EXPLAIN
- select * from optimizer_trace
And then look for something like this:
"join_execution": {
|
...
|
"filesort_priority_queue_optimization": {
|
"limit": 10,
|
"rows_estimate": 198717,
|
"row_size": 215,
|
"memory_available": 262144,
|
"chosen": true
|
},
|
In MariaDB, there is no optimizer_trace, so one can't see it at all.
{"report":{"fcp":1507.5999999046326,"ttfb":535.1999998092651,"pageVisibility":"visible","entityId":40314,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":32,"apdex":0.5,"journeyId":"b763375f-5c11-4ac0-97d3-37f3797dc0b7","navigationType":0,"readyForUser":1610.5,"redirectCount":0,"resourceLoadedEnd":1193.5,"resourceLoadedStart":560.9000000953674,"resourceTiming":[{"duration":144.69999980926514,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":560.9000000953674,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":560.9000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":705.5999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":145,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2cib/820016/12ta74/494e4c556ecbb29f90a3d3b4f09cb99c/_/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&whisper-enabled=true","startTime":561.0999999046326,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":561.0999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":706.0999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":508,"initiatorType":"script","name":"https://jira.mariadb.org/s/0917945aaa57108d00c5076fea35e069-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":561.3000001907349,"connectEnd":561.3000001907349,"connectStart":561.3000001907349,"domainLookupEnd":561.3000001907349,"domainLookupStart":561.3000001907349,"fetchStart":561.3000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":722.1999998092651,"responseEnd":1069.3000001907349,"responseStart":735.3000001907349,"secureConnectionStart":561.3000001907349},{"duration":625.8000001907349,"initiatorType":"script","name":"https://jira.mariadb.org/s/2d8175ec2fa4c816e8023260bd8c1786-CDN/lu2cib/820016/12ta74/494e4c556ecbb29f90a3d3b4f09cb99c/_/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&whisper-enabled=true","startTime":561.5,"connectEnd":561.5,"connectStart":561.5,"domainLookupEnd":561.5,"domainLookupStart":561.5,"fetchStart":561.5,"redirectEnd":0,"redirectStart":0,"requestStart":722.6999998092651,"responseEnd":1187.3000001907349,"responseStart":765,"secureConnectionStart":561.5},{"duration":173.7000002861023,"initiatorType":"script","name":"https://jira.mariadb.org/s/a9324d6758d385eb45c462685ad88f1d-CDN/lu2cib/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":561.5999999046326,"connectEnd":561.5999999046326,"connectStart":561.5999999046326,"domainLookupEnd":561.5999999046326,"domainLookupStart":561.5999999046326,"fetchStart":561.5999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":722.9000000953674,"responseEnd":735.3000001907349,"responseStart":734.1999998092651,"secureConnectionStart":561.5999999046326},{"duration":178.09999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":561.8000001907349,"connectEnd":726.5,"connectStart":726.5,"domainLookupEnd":726.5,"domainLookupStart":726.5,"fetchStart":561.8000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":727,"responseEnd":739.9000000953674,"responseStart":738.9000000953674,"secureConnectionStart":726.5},{"duration":177.59999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":562,"connectEnd":562,"connectStart":562,"domainLookupEnd":562,"domainLookupStart":562,"fetchStart":562,"redirectEnd":0,"redirectStart":0,"requestStart":727.0999999046326,"responseEnd":739.5999999046326,"responseStart":738.0999999046326,"secureConnectionStart":562},{"duration":196.60000038146973,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2cib/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":562.1999998092651,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":562.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":758.8000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":217.40000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":562.4000000953674,"connectEnd":562.4000000953674,"connectStart":562.4000000953674,"domainLookupEnd":562.4000000953674,"domainLookupStart":562.4000000953674,"fetchStart":562.4000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":763.0999999046326,"responseEnd":779.8000001907349,"responseStart":774.8000001907349,"secureConnectionStart":562.4000000953674},{"duration":196.90000009536743,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2cib/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":562.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":562.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":759.4000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":218.90000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/s/5d5e8fe91fbc506585e83ea3b62ccc4b-CDN/lu2cib/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":562.6999998092651,"connectEnd":562.6999998092651,"connectStart":562.6999998092651,"domainLookupEnd":562.6999998092651,"domainLookupStart":562.6999998092651,"fetchStart":562.6999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":764,"responseEnd":781.5999999046326,"responseStart":778.4000000953674,"secureConnectionStart":562.6999998092651},{"duration":625.9000000953674,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":563.5,"connectEnd":563.5,"connectStart":563.5,"domainLookupEnd":563.5,"domainLookupStart":563.5,"fetchStart":563.5,"redirectEnd":0,"redirectStart":0,"requestStart":902.6999998092651,"responseEnd":1189.4000000953674,"responseStart":1186.4000000953674,"secureConnectionStart":563.5},{"duration":618.9000000953674,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":574.5999999046326,"connectEnd":574.5999999046326,"connectStart":574.5999999046326,"domainLookupEnd":574.5999999046326,"domainLookupStart":574.5999999046326,"fetchStart":574.5999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":1001.5999999046326,"responseEnd":1193.5,"responseStart":1189.5,"secureConnectionStart":574.5999999046326},{"duration":253.30000019073486,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":1209.5999999046326,"connectEnd":1209.5999999046326,"connectStart":1209.5999999046326,"domainLookupEnd":1209.5999999046326,"domainLookupStart":1209.5999999046326,"fetchStart":1209.5999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":1426.1999998092651,"responseEnd":1462.9000000953674,"responseStart":1461.6999998092651,"secureConnectionStart":1209.5999999046326},{"duration":275.30000019073486,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":1500.5999999046326,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":1500.5999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1775.9000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":184.80000019073486,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":1526,"connectEnd":1526,"connectStart":1526,"domainLookupEnd":1526,"domainLookupStart":1526,"fetchStart":1526,"redirectEnd":0,"redirectStart":0,"requestStart":1670.4000000953674,"responseEnd":1710.8000001907349,"responseStart":1709,"secureConnectionStart":1526}],"fetchStart":1,"domainLookupStart":1,"domainLookupEnd":1,"connectStart":1,"connectEnd":1,"requestStart":375,"responseStart":536,"responseEnd":568,"domLoading":542,"domInteractive":1848,"domContentLoadedEventStart":1848,"domContentLoadedEventEnd":1893,"domComplete":2562,"loadEventStart":2562,"loadEventEnd":2563,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1807.5999999046326},{"name":"bigPipe.sidebar-id.end","time":1808.4000000953674},{"name":"bigPipe.activity-panel-pipe-id.start","time":1808.5999999046326},{"name":"bigPipe.activity-panel-pipe-id.end","time":1811.8000001907349},{"name":"activityTabFullyLoaded","time":1908.0999999046326}],"measures":[],"correlationId":"83f1344fa2344c","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":96,"dbReadsTimeInMs":10,"dbConnsTimeInMs":19,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
It would be logical if the output was reflected in EXPLAIN. The problem is that both MySQL and MariaDB make the decision about whether to use PQ at a very late phase:
#0 check_if_pq_applicable (param=0x7ffff7e9fb50, filesort_info=0x7ffff7e9fbd0, table=0x7fffe3cabe70, num_rows=216437, memory_available=2097152) at /home/psergey/dev2/10.0/sql/filesort.cc:1307
#1 0x000000000084db80 in filesort (thd=0x7fffd4398070, table=0x7fffe3cabe70, sortorder=0x7fffe3c948a8, s_length=1, select=0x7fffe3c943b0, max_rows=10, sort_positions=false, examined_rows=0x7ffff7ea0100, found_rows=0x7ffff7ea0108) at /home/psergey/dev2/10.0/sql/filesort.cc:224
#2 0x00000000006c46aa in create_sort_index (thd=0x7fffd4398070, join=0x7fffe3c78a98, order=0x7fffe3c78988, filesort_limit=10, select_limit=10, is_order_by=true) at /home/psergey/dev2/10.0/sql/sql_select.cc:20571
#3 0x0000000000699c40 in JOIN::exec_inner (this=0x7fffe3c78a98) at /home/psergey/dev2/10.0/sql/sql_select.cc:3046
#4 0x0000000000697142 in JOIN::exec (this=0x7fffe3c78a98) at /home/psergey/dev2/10.0/sql/sql_select.cc:2366
#5 0x000000000069a715 in mysql_select (thd=0x7fffd4398070, rref_pointer_array=0x7fffd439c6d8, tables=0x7fffe3c78290, wild_num=1, fields=..., conds=0x0, og_num=1, order=0x7fffe3c78988, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x7fffe3c78a78, unit=0x7fffd439bd78, select_lex=0x7fffd439c460) at /home/psergey/dev2/10.0/sql/sql_select.cc:3303
EXPLAIN execution does not go through filesort()/check_if_pq_applicable(). In order to check whether we're using PQ in EXPLAIN, one would need to do some code re-structuring.