mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
1f4a9f086a
This was done after discussions with Igor, Sanja and Bar. The main reason for removing the deprication was to ensure that MariaDB is always backward compatible whenever possible. Other things: - Added statistics counters, mainly for the feedback plugin. - INTO OUTFILE - INTO variable - If INTO is using the old syntax (end of query)
103 lines
2.6 KiB
Text
103 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 4079 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;
|