mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Replaced a lame implementation of the function sel_trees_must_be_ored
that blocked building index merge plans for the queries with where conditions of the form (key1|2_p1=c AND range(key1_p2)) OR (key1|2_p1=c AND range(key2_p2)). The problem was discovered by Sergey Petrunia when he reviewed the patch for WL#24. Added new test cases. One of them failed to produce an index merge plan before the patch was applied.
This commit is contained in:
@ -1076,6 +1076,68 @@ ID BETWEEN 3500 AND 3800) AND Country='USA'
|
||||
AND (Name LIKE 'Pho%' OR ID BETWEEN 4000 AND 4300);
|
||||
ID Name Country Population
|
||||
3798 Phoenix USA 1321045
|
||||
DROP INDEX Population ON City;
|
||||
DROP INDEX Name ON City;
|
||||
EXPLAIN
|
||||
SELECT * FROM City
|
||||
WHERE Country='USA' AND Population BETWEEN 101000 AND 102000 OR
|
||||
Country='USA' AND Name LIKE 'Pa%';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE City index_merge Country,CountryPopulation,CountryName CountryPopulation,CountryName 7,38 NULL 10 Using sort_union(CountryPopulation,CountryName); Using where
|
||||
SELECT * FROM City USE INDEX()
|
||||
WHERE Country='USA' AND Population BETWEEN 101000 AND 102000 OR
|
||||
Country='USA' AND Name LIKE 'Pa%';
|
||||
ID Name Country Population
|
||||
3932 Paterson USA 149222
|
||||
3943 Pasadena USA 141674
|
||||
3953 Pasadena USA 133936
|
||||
3967 Paradise USA 124682
|
||||
3986 Palmdale USA 116670
|
||||
4030 Sandy USA 101853
|
||||
4031 Athens-Clarke County USA 101489
|
||||
4032 Cambridge USA 101355
|
||||
SELECT * FROM City
|
||||
WHERE Country='USA' AND Population BETWEEN 101000 AND 102000 OR
|
||||
Country='USA' AND Name LIKE 'Pa%';
|
||||
ID Name Country Population
|
||||
3932 Paterson USA 149222
|
||||
3943 Pasadena USA 141674
|
||||
3953 Pasadena USA 133936
|
||||
3967 Paradise USA 124682
|
||||
3986 Palmdale USA 116670
|
||||
4030 Sandy USA 101853
|
||||
4031 Athens-Clarke County USA 101489
|
||||
4032 Cambridge USA 101355
|
||||
EXPLAIN
|
||||
SELECT * FROM City
|
||||
WHERE Country='USA' AND
|
||||
(Population BETWEEN 101000 AND 102000 OR Name LIKE 'Pa%');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE City index_merge Country,CountryPopulation,CountryName CountryPopulation,CountryName 7,38 NULL 10 Using sort_union(CountryPopulation,CountryName); Using where
|
||||
SELECT * FROM City
|
||||
WHERE Country='USA' AND
|
||||
(Population BETWEEN 101000 AND 102000 OR Name LIKE 'Pa%');
|
||||
ID Name Country Population
|
||||
3932 Paterson USA 149222
|
||||
3943 Pasadena USA 141674
|
||||
3953 Pasadena USA 133936
|
||||
3967 Paradise USA 124682
|
||||
3986 Palmdale USA 116670
|
||||
4030 Sandy USA 101853
|
||||
4031 Athens-Clarke County USA 101489
|
||||
4032 Cambridge USA 101355
|
||||
SELECT * FROM City
|
||||
WHERE Country='USA' AND
|
||||
(Population BETWEEN 101000 AND 102000 OR Name LIKE 'Pa%');
|
||||
ID Name Country Population
|
||||
3932 Paterson USA 149222
|
||||
3943 Pasadena USA 141674
|
||||
3953 Pasadena USA 133936
|
||||
3967 Paradise USA 124682
|
||||
3986 Palmdale USA 116670
|
||||
4030 Sandy USA 101853
|
||||
4031 Athens-Clarke County USA 101489
|
||||
4032 Cambridge USA 101355
|
||||
DROP DATABASE world;
|
||||
use test;
|
||||
CREATE TABLE t1 (
|
||||
|
Reference in New Issue
Block a user