Wrong result with LooseScan , multipart keys
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
MariaDB |
Fix Released
|
Critical
|
Igor Babaev |
Bug Description
The following query:
SELECT * FROM t1
WHERE a IN (
SELECT t2.a
FROM t2 , t3
WHERE t2.b = t3.b
);
returns
5
5
when executed with loosescan=on, even though t1 contains only one row where a = 5 .
EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t2 index b b 9 NULL 2 Using where; Using index; LooseScan
1 PRIMARY t3 ref b b 4 test.t2.b 1 Using index; FirstMatch(t2)
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where; Using join buffer (flat, BNL join)
minimal switch: semijoin=
full switch: index_merge=
bzr version-info
revision-id: <email address hidden>
date: 2011-11-07 16:39:02 +0400
build-date: 2011-11-08 12:26:06 +0200
revno: 3273
branch-nick: maria-5.3
test case:
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (9),(0),(8),(5);
CREATE TABLE t2 (a int, b varchar(1), KEY (b,a));
INSERT INTO t2 VALUES (5,'r'),(5,'z');
CREATE TABLE t3 (a int, b varchar(1), KEY (b,a));
INSERT INTO t3 VALUES (5,'r'),(5,'z');
SET SESSION optimizer_
SELECT * FROM t1
WHERE a IN (
SELECT t2.a
FROM t2 , t3
WHERE t2.b = t3.b
);
Changed in maria: | |
milestone: | none → 5.3 |
assignee: | nobody → Sergey Petrunia (sergefp) |
Changed in maria: | |
importance: | Undecided → High |
Changed in maria: | |
status: | New → Confirmed |
importance: | High → Critical |
Changed in maria: | |
status: | Confirmed → In Progress |
assignee: | Sergey Petrunia (sergefp) → Igor Babaev (igorb-seattle) |
Changed in maria: | |
status: | In Progress → Fix Committed |
Changed in maria: | |
status: | Fix Committed → Fix Released |