# include/index_merge_ror_cpk.inc
#
# Clustered PK ROR-index_merge tests
#
# Note: The comments/expectations refer to InnoDB.
# They might be not valid for other storage engines.
#
# Last update:
# 2006-08-02 ML test refactored
# old name was t/index_merge_ror_cpk.test
# main code went into include/index_merge_ror_cpk.inc
#
/* keys with tails from CPK members */
key (pktail1ok, pk1),
key (pktail2ok, pk1, pk2),
key (pktail3bad, pk2, pk1),
key (pktail4bad, pk1, pk2copy),
key (pktail5bad, pk1, pk2, pk2copy),
primary key (pk1, pk2)
);
--disable_query_log begin;
let $1=10000; while ($1)
{
eval insert into t1 values ($1div10,$1mod100, $1/100,$1/100, $1/100,$1/100,$1/100,$1/100,$1/100, $1mod100, $1/1000,'filler-data-$1','filler2');
dec $1;
}
commit;
--enable_query_log
# Verify that range scan on CPK is ROR
# (use index_intersection because it is impossible to check that for index union)
explain select * from t1 where pk1 = 1and pk2 < 80and key1=0;
# CPK scan + 1 ROR range scan is a special case
select * from t1 where pk1 = 1and pk2 < 80and key1=0;
# Verify that CPK fields are considered to be covered by index scans
explain select pk1,pk2 from t1 where key1 = 10and key2=10and2*pk1+1 < 2*96+1;
select pk1,pk2 from t1 where key1 = 10and key2=10and2*pk1+1 < 2*96+1;
# Verify that CPK is always used for index intersection scans
# (this is because it is used as a filter, notfor retrieval)
explain select * from t1 where badkey=1and key1=10; set @tmp_index_merge_ror_cpk=@@optimizer_switch; set optimizer_switch='extended_keys=off';
--replace_column 9 ROWS
explain select * from t1 where pk1 < 7500and key1 = 10; set optimizer_switch=@tmp_index_merge_ror_cpk;
# Verify that keys with'tails'of PK members are ok.
explain select * from t1 where pktail1ok=1and key1=10;
explain select * from t1 where pktail2ok=1and key1=10;
# Note: The following is actually a deficiency, it uses sort_union currently.
# This comment refers to InnoDB andis probably not valid for other engines.
explain select * from t1 where (pktail2ok=1and pk1< 50000) or key1=10;
# The expected rows differs a bit from platform to platform
--replace_result 98 ROWS 99 ROWS
explain select * from t1 where pktail3bad=1and key1=10;
explain select * from t1 where pktail4bad=1and key1=10;
explain select * from t1 where pktail5bad=1and key1=10;
# Test for problem with innodb key values prefetch buffer:
explain select pk1,pk2,key1,key2 from t1 where key1 = 10and key2=10 limit 10;
select pk1,pk2,key1,key2 from t1 where key1 = 10and key2=10 limit 10;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.