create table ten(a int);
|
insert into ten values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
create table t1(key1 int, col1 int, key(key1));
|
insert into t1 select A.a, A.a from ten A, ten B, ten C;
|
|
set histogram_size=100;
|
set use_stat_tables='preferably';
|
set optimizer_use_condition_selectivity=4;
|
analyze table t1 persistent for all;
|
mysql> explain extended select * from t1 where col1=2;
|
+------+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+
|
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
+------+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+
|
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 1000 | 9.90 | Using where |
|
+------+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+
|
This is ok.
mysql> explain extended select * from t1 where key1=2;
|
+------+-------------+-------+------+---------------+------+---------+-------+------+----------+-------+
|
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
+------+-------------+-------+------+---------------+------+---------+-------+------+----------+-------+
|
| 1 | SIMPLE | t1 | ref | key1 | key1 | 5 | const | 100 | 10.00 | |
|
+------+-------------+-------+------+---------------+------+---------+-------+------+----------+-------+
|
This is not ok. "key1=2" is used for ref access. However, its selectivity is still present in "filtered%". Ref access is employed when a condition is very selective, counting its selectivity twice will cause gross under-estimation of output cardinality.
{"report":{"fcp":748.6999998092651,"ttfb":139.19999980926514,"pageVisibility":"visible","entityId":34002,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":1,"journeyId":"ff79a184-3358-45c3-b78d-c026505320ac","navigationType":0,"readyForUser":868.2999997138977,"redirectCount":0,"resourceLoadedEnd":756.5,"resourceLoadedStart":144.09999990463257,"resourceTiming":[{"duration":5.400000095367432,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2bsh/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":144.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":144.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":149.5,"responseStart":0,"secureConnectionStart":0},{"duration":5.600000381469727,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2bsh/820016/12ta74/eb142f92e4bd16bd1ef8b08c1b9d5d56/_/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":144.39999961853027,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":144.39999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":150,"responseStart":0,"secureConnectionStart":0},{"duration":59.69999980926514,"initiatorType":"script","name":"https://jira.mariadb.org/s/b09d0d077992e4331b5f9ec0d3ec448c-CDN/lu2bsh/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":144.5,"connectEnd":144.5,"connectStart":144.5,"domainLookupEnd":144.5,"domainLookupStart":144.5,"fetchStart":144.5,"redirectEnd":0,"redirectStart":0,"requestStart":144.5,"responseEnd":204.19999980926514,"responseStart":204.19999980926514,"secureConnectionStart":144.5},{"duration":294.09999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/b47ab3df14096803b180217eb8482517-CDN/lu2bsh/820016/12ta74/eb142f92e4bd16bd1ef8b08c1b9d5d56/_/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":144.59999990463257,"connectEnd":144.59999990463257,"connectStart":144.59999990463257,"domainLookupEnd":144.59999990463257,"domainLookupStart":144.59999990463257,"fetchStart":144.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":144.59999990463257,"responseEnd":438.69999980926514,"responseStart":438.69999980926514,"secureConnectionStart":144.59999990463257},{"duration":297.69999980926514,"initiatorType":"script","name":"https://jira.mariadb.org/s/6c569cbf8087ab04e40d0bef98627457-CDN/lu2bsh/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":144.69999980926514,"connectEnd":144.69999980926514,"connectStart":144.69999980926514,"domainLookupEnd":144.69999980926514,"domainLookupStart":144.69999980926514,"fetchStart":144.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":144.69999980926514,"responseEnd":442.3999996185303,"responseStart":442.3999996185303,"secureConnectionStart":144.69999980926514},{"duration":298.40000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bsh/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":144.7999997138977,"connectEnd":144.7999997138977,"connectStart":144.7999997138977,"domainLookupEnd":144.7999997138977,"domainLookupStart":144.7999997138977,"fetchStart":144.7999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":144.7999997138977,"responseEnd":443.19999980926514,"responseStart":443.19999980926514,"secureConnectionStart":144.7999997138977},{"duration":298.59999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bsh/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":145,"connectEnd":145,"connectStart":145,"domainLookupEnd":145,"domainLookupStart":145,"fetchStart":145,"redirectEnd":0,"redirectStart":0,"requestStart":145,"responseEnd":443.59999990463257,"responseStart":443.59999990463257,"secureConnectionStart":145},{"duration":298.90000009536743,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2bsh/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":145.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":145.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":444,"responseStart":0,"secureConnectionStart":0},{"duration":298.90000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":145.09999990463257,"connectEnd":145.09999990463257,"connectStart":145.09999990463257,"domainLookupEnd":145.09999990463257,"domainLookupStart":145.09999990463257,"fetchStart":145.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":145.09999990463257,"responseEnd":444,"responseStart":444,"secureConnectionStart":145.09999990463257},{"duration":299.19999980926514,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2bsh/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":145.19999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":145.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":444.3999996185303,"responseStart":0,"secureConnectionStart":0},{"duration":299.40000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/s/81b5d7c27af3ebc078cc4a36383678ba-CDN/lu2bsh/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":145.2999997138977,"connectEnd":145.2999997138977,"connectStart":145.2999997138977,"domainLookupEnd":145.2999997138977,"domainLookupStart":145.2999997138977,"fetchStart":145.2999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":145.2999997138977,"responseEnd":444.69999980926514,"responseStart":444.69999980926514,"secureConnectionStart":145.2999997138977},{"duration":576.9000000953674,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bsh/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":151.89999961853027,"connectEnd":151.89999961853027,"connectStart":151.89999961853027,"domainLookupEnd":151.89999961853027,"domainLookupStart":151.89999961853027,"fetchStart":151.89999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":151.89999961853027,"responseEnd":728.7999997138977,"responseStart":728.7999997138977,"secureConnectionStart":151.89999961853027},{"duration":589.1000003814697,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bsh/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":157.89999961853027,"connectEnd":157.89999961853027,"connectStart":157.89999961853027,"domainLookupEnd":157.89999961853027,"domainLookupStart":157.89999961853027,"fetchStart":157.89999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":157.89999961853027,"responseEnd":747,"responseStart":747,"secureConnectionStart":157.89999961853027},{"duration":337.40000009536743,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":351.8999996185303,"connectEnd":351.8999996185303,"connectStart":351.8999996185303,"domainLookupEnd":351.8999996185303,"domainLookupStart":351.8999996185303,"fetchStart":351.8999996185303,"redirectEnd":0,"redirectStart":0,"requestStart":351.8999996185303,"responseEnd":689.2999997138977,"responseStart":689.2999997138977,"secureConnectionStart":351.8999996185303},{"duration":38.200000286102295,"initiatorType":"link","name":"https://jira.mariadb.org/s/d5715adaadd168a9002b108b2b039b50-CDN/lu2bsh/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/css/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":703.8999996185303,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":703.8999996185303,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":742.0999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":45.09999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bsh/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":704.6999998092651,"connectEnd":704.6999998092651,"connectStart":704.6999998092651,"domainLookupEnd":704.6999998092651,"domainLookupStart":704.6999998092651,"fetchStart":704.6999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":704.6999998092651,"responseEnd":749.7999997138977,"responseStart":749.7999997138977,"secureConnectionStart":704.6999998092651},{"duration":51.40000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/s/a000436f14ae82363031988faf35ddba-CDN/lu2bsh/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/js/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":705.0999999046326,"connectEnd":705.0999999046326,"connectStart":705.0999999046326,"domainLookupEnd":705.0999999046326,"domainLookupStart":705.0999999046326,"fetchStart":705.0999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":705.0999999046326,"responseEnd":756.5,"responseStart":756.3999996185303,"secureConnectionStart":705.0999999046326},{"duration":15.800000190734863,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":741.6999998092651,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":741.6999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":757.5,"responseStart":0,"secureConnectionStart":0}],"fetchStart":1,"domainLookupStart":1,"domainLookupEnd":1,"connectStart":1,"connectEnd":1,"requestStart":8,"responseStart":140,"responseEnd":158,"domLoading":143,"domInteractive":939,"domContentLoadedEventStart":939,"domContentLoadedEventEnd":990,"domComplete":1067,"loadEventStart":1067,"loadEventEnd":1067,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":902.3999996185303},{"name":"bigPipe.sidebar-id.end","time":903.1999998092651},{"name":"bigPipe.activity-panel-pipe-id.start","time":903.2999997138977},{"name":"bigPipe.activity-panel-pipe-id.end","time":905.5},{"name":"activityTabFullyLoaded","time":1008}],"measures":[],"correlationId":"3ab4783a064c64","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":74,"dbReadsTimeInMs":10,"dbConnsTimeInMs":16,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
We should recongize it as an equality that was bound by ref and so discount its
selectivity (the selectivity comes from ... range... how do we figure out that
ref-bound equality has contributed as a possible range scan?)
Idea: keep array of induced selectivity
table->added_selectivity[field_no] = 0.123456
and if $field_no is used for ref access, than it's not contributing to
selectivity, and we remove its selectivity from the product.
Q: what to do about range accesses that span multiple key parts? It's not
possible to remove one key part from selectivity calculations...