mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
104 lines
2.6 KiB
Text
104 lines
2.6 KiB
Text
|
set @subselect_mat_cost=@@optimizer_switch;
|
||
|
set optimizer_switch='mrr=on,mrr_sort_keys=on,index_condition_pushdown=on';
|
||
|
set long_query_time=0.1;
|
||
|
drop database if exists world;
|
||
|
set names utf8;
|
||
|
create database world;
|
||
|
use world;
|
||
|
CREATE TABLE Country (
|
||
|
Code char(3) NOT NULL default '',
|
||
|
Name char(52) NOT NULL default '',
|
||
|
SurfaceArea float(10,2) NOT NULL default '0.00',
|
||
|
Population int(11) NOT NULL default '0',
|
||
|
Capital int(11) default NULL,
|
||
|
PRIMARY KEY (Code),
|
||
|
UNIQUE INDEX (Name)
|
||
|
);
|
||
|
CREATE TABLE City (
|
||
|
ID int(11) NOT NULL auto_increment,
|
||
|
Name char(35) NOT NULL default '',
|
||
|
Country char(3) NOT NULL default '',
|
||
|
Population int(11) NOT NULL default '0',
|
||
|
PRIMARY KEY (ID),
|
||
|
INDEX (Population),
|
||
|
INDEX (Country)
|
||
|
);
|
||
|
CREATE TABLE CountryLanguage (
|
||
|
Country char(3) NOT NULL default '',
|
||
|
Language char(30) NOT NULL default '',
|
||
|
Percentage float(3,1) NOT NULL default '0.0',
|
||
|
PRIMARY KEY (Country, Language),
|
||
|
INDEX (Percentage)
|
||
|
);
|
||
|
Make the schema and data more diverse by adding more indexes, nullable
|
||
|
columns, and NULL data.
|
||
|
create index SurfaceArea on Country(SurfaceArea);
|
||
|
create index Language on CountryLanguage(Language);
|
||
|
create index CityName on City(Name);
|
||
|
alter table City change population population int(11) null default 0;
|
||
|
select max(id) from City into @max_city_id;
|
||
|
insert into City values (@max_city_id + 1,'Kilifarevo','BGR',NULL);
|
||
|
SELECT COUNT(*) FROM Country;
|
||
|
COUNT(*)
|
||
|
239
|
||
|
SELECT COUNT(*) FROM City;
|
||
|
COUNT(*)
|
||
|
4080
|
||
|
SELECT COUNT(*) FROM CountryLanguage;
|
||
|
COUNT(*)
|
||
|
984
|
||
|
set @@optimizer_switch = 'exists_to_in=on,in_to_exists=on,semijoin=on,materialization=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on';
|
||
|
|
||
|
1. Subquery in a disjunctive WHERE clause of the outer query.
|
||
|
|
||
|
|
||
|
Q1.1m:
|
||
|
MATERIALIZATION: there are too many rows in the outer query
|
||
|
to be looked up in the inner table.
|
||
|
EXPLAIN
|
||
|
SELECT Name FROM Country
|
||
|
WHERE (EXISTS (select 1 from City where City.Population > 100000 and
|
||
|
Code = Country) OR
|
||
|
Name LIKE 'L%') AND
|
||
|
surfacearea > 1000000;
|
||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||
|
1 PRIMARY Country ALL Name,SurfaceArea NULL NULL NULL 239 Using where
|
||
|
2 MATERIALIZED City ALL Population,Country NULL NULL NULL 4080 Using where
|
||
|
SELECT Name FROM Country
|
||
|
WHERE (EXISTS (select 1 from City where City.Population > 100000 and
|
||
|
Code = Country) OR
|
||
|
Name LIKE 'L%') AND
|
||
|
surfacearea > 1000000;
|
||
|
Name
|
||
|
Algeria
|
||
|
Angola
|
||
|
Argentina
|
||
|
Australia
|
||
|
Bolivia
|
||
|
Brazil
|
||
|
Egypt
|
||
|
South Africa
|
||
|
Ethiopia
|
||
|
Indonesia
|
||
|
India
|
||
|
Iran
|
||
|
Canada
|
||
|
Kazakstan
|
||
|
China
|
||
|
Colombia
|
||
|
Congo, The Democratic Republic of the
|
||
|
Libyan Arab Jamahiriya
|
||
|
Mali
|
||
|
Mauritania
|
||
|
Mexico
|
||
|
Mongolia
|
||
|
Niger
|
||
|
Peru
|
||
|
Saudi Arabia
|
||
|
Sudan
|
||
|
Chad
|
||
|
Russian Federation
|
||
|
United States
|
||
|
drop database world;
|
||
|
set optimizer_switch=@subselect_mat_cost;
|