2002-03-22 21:55:08 +01:00
|
|
|
|
-- source include/have_query_cache.inc
|
|
|
|
|
|
2001-12-06 00:05:30 +01:00
|
|
|
|
#
|
|
|
|
|
# Tests with query cache
|
|
|
|
|
#
|
2003-09-15 14:16:13 +02:00
|
|
|
|
set GLOBAL query_cache_size=1355776;
|
2001-12-06 00:05:30 +01:00
|
|
|
|
|
|
|
|
|
# Reset query cache variables.
|
|
|
|
|
|
2001-12-13 01:31:19 +01:00
|
|
|
|
flush query cache; # This crashed in some versions
|
|
|
|
|
flush query cache; # This crashed in some versions
|
2001-12-06 00:05:30 +01:00
|
|
|
|
reset query cache;
|
|
|
|
|
flush status;
|
2003-01-06 00:48:59 +01:00
|
|
|
|
--disable_warnings
|
2003-09-15 14:16:13 +02:00
|
|
|
|
drop table if exists t1,t2,t3,t4,t11,t21;
|
2003-01-06 00:48:59 +01:00
|
|
|
|
drop database if exists mysqltest;
|
|
|
|
|
--enable_warnings
|
2001-12-09 23:08:24 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# First simple test
|
|
|
|
|
#
|
|
|
|
|
|
2001-12-06 00:05:30 +01:00
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t1;
|
|
|
|
|
select sql_no_cache * from t1;
|
|
|
|
|
select length(now()) from t1;
|
|
|
|
|
|
|
|
|
|
# Only check the variables that are independent of the machine and startup
|
|
|
|
|
# options
|
|
|
|
|
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2001-12-09 23:08:24 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# MERGE TABLES with INSERT/UPDATE and DELETE
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
create table t2 (a int not null);
|
|
|
|
|
insert into t2 values (4),(5),(6);
|
2003-12-10 05:31:42 +01:00
|
|
|
|
create table t3 (a int not null) engine=MERGE UNION=(t1,t2) INSERT_METHOD=FIRST;
|
2001-12-09 23:08:24 +01:00
|
|
|
|
# insert
|
|
|
|
|
select * from t3;
|
|
|
|
|
select * from t3;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
insert into t2 values (7);
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
insert into t3 values (8);
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
# update
|
|
|
|
|
select * from t3;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
update t2 set a=9 where a=7;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
update t3 set a=10 where a=1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
#delete
|
|
|
|
|
select * from t3;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
delete from t2 where a=9;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
delete from t3 where a=10;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
drop table t1, t2, t3;
|
|
|
|
|
#
|
|
|
|
|
# FLUSH QUERY CACHE
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
create table t2 (a int not null);
|
|
|
|
|
insert into t2 values (1),(2),(3);
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t2;
|
|
|
|
|
insert into t1 values (4);
|
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
|
flush query cache;
|
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
|
drop table t1, t2;
|
2001-12-14 15:02:41 +01:00
|
|
|
|
# With join results...
|
|
|
|
|
create table t1 (a text not null);
|
|
|
|
|
create table t11 (a text not null);
|
|
|
|
|
create table t2 (a text not null);
|
|
|
|
|
create table t21 (a text not null);
|
|
|
|
|
create table t3 (a text not null);
|
|
|
|
|
insert into t1 values("1111111111111111111111111111111111111111111111111111");
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
2002-01-12 14:40:52 +01:00
|
|
|
|
# t11 and t21 must be over 4Kb (QUERY_CACHE_MIN_RESULT_DATA_SIZE)
|
|
|
|
|
insert into t11 select * from t1;
|
|
|
|
|
insert into t21 select * from t1;
|
2001-12-14 15:02:41 +01:00
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
#results of t3 must be > 0.5Mb
|
|
|
|
|
insert into t3 select * from t1;
|
|
|
|
|
insert into t3 select * from t2;
|
|
|
|
|
insert into t3 select * from t1;
|
|
|
|
|
disable_result_log;
|
|
|
|
|
select * from t11;
|
|
|
|
|
select * from t21;
|
|
|
|
|
enable_result_log;
|
|
|
|
|
show status like "Qcache_total_blocks";
|
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
|
disable_result_log;
|
|
|
|
|
insert into t11 values("");
|
|
|
|
|
select * from t3;
|
|
|
|
|
enable_result_log;
|
|
|
|
|
show status like "Qcache_total_blocks";
|
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
|
flush query cache;
|
|
|
|
|
show status like "Qcache_total_blocks";
|
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
|
drop table t1, t2, t3, t11, t21;
|
2001-12-09 23:08:24 +01:00
|
|
|
|
#
|
|
|
|
|
# SELECT SQL_CACHE ...
|
|
|
|
|
#
|
2002-07-23 17:31:22 +02:00
|
|
|
|
set query_cache_type=demand;
|
2001-12-09 23:08:24 +01:00
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2003-02-27 21:26:09 +01:00
|
|
|
|
select sql_cache * from t1 union select * from t1;
|
2002-07-23 17:31:22 +02:00
|
|
|
|
set query_cache_type=2;
|
2003-02-27 21:26:09 +01:00
|
|
|
|
select sql_cache * from t1 union select * from t1;
|
|
|
|
|
select * from t1 union select sql_cache * from t1;
|
2001-12-09 23:08:24 +01:00
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2002-07-23 17:31:22 +02:00
|
|
|
|
set query_cache_type=on;
|
2001-12-09 23:08:24 +01:00
|
|
|
|
#
|
|
|
|
|
# RESET QUERY CACHE
|
|
|
|
|
#
|
|
|
|
|
reset query cache;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
#
|
|
|
|
|
# SELECT SQL_NO_CACHE
|
|
|
|
|
#
|
|
|
|
|
select sql_no_cache * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
drop table t1;
|
|
|
|
|
#
|
|
|
|
|
# Check that queries that uses NOW(), LAST_INSERT_ID()... are not cached.
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a text not null);
|
|
|
|
|
select CONNECTION_ID() from t1;
|
|
|
|
|
#GET_LOCK
|
|
|
|
|
#RELEASE_LOCK
|
|
|
|
|
#LOAD_FILE
|
|
|
|
|
select FOUND_ROWS();
|
|
|
|
|
select NOW() from t1;
|
|
|
|
|
select CURDATE() from t1;
|
|
|
|
|
select CURTIME() from t1;
|
|
|
|
|
select DATABASE() from t1;
|
|
|
|
|
select ENCRYPT("test") from t1;
|
|
|
|
|
select LAST_INSERT_ID() from t1;
|
|
|
|
|
select RAND() from t1;
|
|
|
|
|
select UNIX_TIMESTAMP() from t1;
|
|
|
|
|
select USER() from t1;
|
|
|
|
|
select benchmark(1,1) from t1;
|
2003-10-30 11:57:26 +01:00
|
|
|
|
explain extended select benchmark(1,1) from t1;
|
2001-12-09 23:08:24 +01:00
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
#
|
|
|
|
|
# Tests when the cache is filled
|
|
|
|
|
#
|
|
|
|
|
create table t2 (a text not null);
|
|
|
|
|
insert into t1 values("1111111111111111111111111111111111111111111111111111");
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2; # 2
|
|
|
|
|
insert into t2 select * from t1; # 3
|
|
|
|
|
insert into t1 select * from t2; # 5
|
|
|
|
|
insert into t2 select * from t1; # 8
|
|
|
|
|
insert into t1 select * from t2; # 13
|
|
|
|
|
insert into t2 select * from t1; # 21
|
|
|
|
|
insert into t1 select * from t2; # 34
|
|
|
|
|
insert into t2 select * from t1; # 55
|
|
|
|
|
insert into t1 select * from t2; # 89
|
|
|
|
|
insert into t2 select * from t1; # 144
|
|
|
|
|
insert into t1 select * from t2; # 233
|
|
|
|
|
insert into t2 select * from t1; # 357
|
|
|
|
|
insert into t1 select * from t2; # 610
|
|
|
|
|
insert into t2 select * from t1; # 987
|
|
|
|
|
insert into t1 select * from t2; # 1597
|
|
|
|
|
insert into t2 select * from t1; # 2584
|
|
|
|
|
insert into t1 select * from t2; # 4181
|
|
|
|
|
|
|
|
|
|
show status like "Qcache_hits";
|
2002-11-17 19:41:25 +01:00
|
|
|
|
show status like "Qcache_lowmem_prunes";
|
2001-12-09 23:08:24 +01:00
|
|
|
|
disable_result_log;
|
|
|
|
|
select a as a1, a as a2 from t1;
|
|
|
|
|
select a as a2, a as a3 from t1;
|
|
|
|
|
select a as a3, a as a4 from t1;
|
|
|
|
|
# next query must be out of 1Mb cache
|
|
|
|
|
select a as a1, a as a2 from t1;
|
|
|
|
|
enable_result_log;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2002-11-17 19:41:25 +01:00
|
|
|
|
show status like "Qcache_lowmem_prunes";
|
2001-12-09 23:08:24 +01:00
|
|
|
|
reset query cache;
|
2001-12-14 15:02:41 +01:00
|
|
|
|
#
|
|
|
|
|
# Query bigger then query_cache_limit
|
|
|
|
|
#
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
|
disable_result_log;
|
|
|
|
|
select * from t1;
|
|
|
|
|
enable_result_log;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
drop table t1,t2;
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# noncachable ODBC work around (and prepare cache for drop database)
|
|
|
|
|
#
|
2003-07-03 10:55:36 +02:00
|
|
|
|
create database mysqltest;
|
2001-12-22 14:13:31 +01:00
|
|
|
|
create table mysqltest.t1 (i int not null auto_increment, a int, primary key (i));
|
|
|
|
|
insert into mysqltest.t1 (a) values (1);
|
|
|
|
|
select * from mysqltest.t1 where i is null;
|
2001-12-14 15:02:41 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# drop db
|
|
|
|
|
#
|
2003-11-20 17:12:49 +01:00
|
|
|
|
create table t1(a int);
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2001-12-22 14:13:31 +01:00
|
|
|
|
select * from mysqltest.t1;
|
2001-12-14 15:02:41 +01:00
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2001-12-22 14:13:31 +01:00
|
|
|
|
drop database mysqltest;
|
2001-12-14 15:02:41 +01:00
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2003-11-20 17:12:49 +01:00
|
|
|
|
drop table t1;
|
2001-12-20 05:14:11 +01:00
|
|
|
|
|
2001-12-14 15:02:41 +01:00
|
|
|
|
#
|
|
|
|
|
# Charset convertion (cp1251_koi8 always present)
|
|
|
|
|
#
|
2003-07-28 17:28:44 +02:00
|
|
|
|
create table t1 (a char(1) not null collate koi8r_general_ci);
|
|
|
|
|
insert into t1 values(_koi8r"<22>");
|
|
|
|
|
set CHARACTER SET koi8r;
|
2001-12-14 15:02:41 +01:00
|
|
|
|
select * from t1;
|
|
|
|
|
set CHARACTER SET cp1251_koi8;
|
|
|
|
|
select * from t1;
|
|
|
|
|
set CHARACTER SET DEFAULT;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2001-12-23 01:43:46 +01:00
|
|
|
|
show status like "Qcache_hits";
|
2001-12-09 23:08:24 +01:00
|
|
|
|
drop table t1;
|
2001-12-10 17:16:51 +01:00
|
|
|
|
|
|
|
|
|
# The following tests can't be done as the values differen on 32 and 64 bit
|
|
|
|
|
# machines :(
|
|
|
|
|
#show variables like "query_cache_size";
|
|
|
|
|
#show status like "Qcache_free_memory";
|
2001-12-20 05:14:11 +01:00
|
|
|
|
|
2001-12-23 01:43:46 +01:00
|
|
|
|
#
|
|
|
|
|
# same tables in different db
|
|
|
|
|
#
|
|
|
|
|
create database if not exists mysqltest;
|
|
|
|
|
create table mysqltest.t1 (i int not null);
|
|
|
|
|
create table t1 (i int not null);
|
|
|
|
|
insert into mysqltest.t1 (i) values (1);
|
|
|
|
|
insert into t1 (i) values (2);
|
|
|
|
|
|
|
|
|
|
select * from t1;
|
|
|
|
|
use mysqltest;
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t1;
|
|
|
|
|
use test;
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
|
|
|
|
|
drop database mysqltest;
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2002-01-02 20:29:41 +01:00
|
|
|
|
#
|
|
|
|
|
# FOUND_ROWS()
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
create table t1 (i int not null);
|
|
|
|
|
insert into t1 (i) values (1),(2),(3),(4);
|
|
|
|
|
|
|
|
|
|
select SQL_CALC_FOUND_ROWS * from t1 limit 2;
|
|
|
|
|
select FOUND_ROWS();
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
|
|
|
|
|
select * from t1 where i=1;
|
|
|
|
|
select FOUND_ROWS();
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
|
|
|
|
|
select SQL_CALC_FOUND_ROWS * from t1 limit 2;
|
|
|
|
|
select FOUND_ROWS();
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
|
|
|
|
|
select * from t1 where i=1;
|
|
|
|
|
select FOUND_ROWS();
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2001-12-20 05:14:11 +01:00
|
|
|
|
#
|
|
|
|
|
# Test insert delayed
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
flush query cache;
|
|
|
|
|
reset query cache;
|
|
|
|
|
|
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
insert delayed into t1 values (4);
|
|
|
|
|
--sleep 5 # Wait for insert delayed to be executed.
|
|
|
|
|
select a from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
drop table t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2002-07-28 21:36:34 +02:00
|
|
|
|
|
2003-03-02 20:39:03 +01:00
|
|
|
|
#
|
|
|
|
|
# Test of min result data unit size changing
|
|
|
|
|
#
|
|
|
|
|
show global variables like "query_cache_min_res_unit";
|
|
|
|
|
set GLOBAL query_cache_min_res_unit=1001;
|
|
|
|
|
show global variables like "query_cache_min_res_unit";
|
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
create table t2 (a int not null);
|
|
|
|
|
insert into t2 values (1),(2),(3);
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t2;
|
|
|
|
|
select * from t2;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
drop table t1;
|
|
|
|
|
select a from t2;
|
|
|
|
|
select a from t2;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
drop table t2;
|
|
|
|
|
set GLOBAL query_cache_min_res_unit=default;
|
|
|
|
|
show global variables like "query_cache_min_res_unit";
|
|
|
|
|
|
2003-07-28 17:28:44 +02:00
|
|
|
|
#
|
|
|
|
|
# Case sensitive test
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1);
|
|
|
|
|
select "aaa" from t1;
|
|
|
|
|
select "AAA" from t1;
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2002-07-28 21:36:34 +02:00
|
|
|
|
#
|
|
|
|
|
# Test of query cache resizing
|
|
|
|
|
#
|
2003-05-31 00:41:11 +02:00
|
|
|
|
create table t1 (a int);
|
2002-07-28 21:36:34 +02:00
|
|
|
|
set GLOBAL query_cache_size=1000;
|
|
|
|
|
show global variables like "query_cache_size";
|
2003-05-31 00:41:11 +02:00
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=1024;
|
|
|
|
|
show global variables like "query_cache_size";
|
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=10240;
|
|
|
|
|
show global variables like "query_cache_size";
|
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=20480;
|
|
|
|
|
show global variables like "query_cache_size";
|
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=40960;
|
|
|
|
|
show global variables like "query_cache_size";
|
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=51200;
|
2002-07-28 21:36:34 +02:00
|
|
|
|
show global variables like "query_cache_size";
|
2003-05-31 00:41:11 +02:00
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=61440;
|
|
|
|
|
show global variables like "query_cache_size";
|
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=81920;
|
|
|
|
|
show global variables like "query_cache_size";
|
|
|
|
|
select * from t1;
|
|
|
|
|
set GLOBAL query_cache_size=102400;
|
|
|
|
|
show global variables like "query_cache_size";
|
|
|
|
|
select * from t1;
|
|
|
|
|
drop table t1;
|
2002-08-07 14:29:49 +02:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Temporary tables
|
|
|
|
|
#
|
|
|
|
|
set GLOBAL query_cache_size=1048576;
|
|
|
|
|
create table t1 (i int not null);
|
|
|
|
|
create table t2 (i int not null);
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
create temporary table t3 (i int not null);
|
|
|
|
|
select * from t2;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
select * from t3;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2002-12-28 20:34:17 +01:00
|
|
|
|
update t1 set i=(select distinct 1 from (select * from t2) a);
|
2002-08-07 14:29:49 +02:00
|
|
|
|
drop table t1, t2, t3;
|
2002-10-07 23:26:15 +02:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# system databse test
|
|
|
|
|
#
|
|
|
|
|
use mysql;
|
|
|
|
|
disable_result_log;
|
|
|
|
|
select * from db;
|
|
|
|
|
enable_result_log;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
use test;
|
|
|
|
|
disable_result_log;
|
|
|
|
|
select * from mysql.db;
|
|
|
|
|
enable_result_log;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2003-01-24 00:54:39 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# simple rename test
|
|
|
|
|
#
|
|
|
|
|
create table t1(id int auto_increment primary key);
|
|
|
|
|
insert into t1 values (NULL), (NULL), (NULL);
|
|
|
|
|
select * from t1 where id=2;
|
|
|
|
|
alter table t1 rename to t2;
|
|
|
|
|
-- error 1146
|
|
|
|
|
select * from t1 where id=2;
|
|
|
|
|
drop table t2;
|
|
|
|
|
-- error 1146
|
|
|
|
|
select * from t1 where id=2;
|
2003-02-14 21:20:38 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Load data invalidation test
|
|
|
|
|
#
|
|
|
|
|
create table t1 (word char(20) not null);
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2004-02-09 12:31:03 +01:00
|
|
|
|
--replace_result $MYSQL_TEST_DIR TEST_DIR
|
|
|
|
|
eval load data infile '$MYSQL_TEST_DIR/std_data/words.dat' into table t1;
|
2003-02-14 21:20:38 +01:00
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2004-02-09 12:31:03 +01:00
|
|
|
|
select count(*) from t1;
|
2003-03-06 16:37:12 +01:00
|
|
|
|
drop table t1;
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# INTO OUTFILE/DUMPFILE test
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a int);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2004-02-09 12:31:03 +01:00
|
|
|
|
select * from t1 into outfile "query_cache.out.file";
|
|
|
|
|
--error 1086
|
|
|
|
|
select * from t1 into outfile "query_cache.out.file";
|
2003-03-06 16:37:12 +01:00
|
|
|
|
select * from t1 limit 1 into dumpfile "query_cache.dump.file";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2003-03-27 13:15:42 +01:00
|
|
|
|
drop table t1;
|
2003-03-31 08:49:09 +02:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# test of SQL_SELECT_LIMIT
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a int);
|
|
|
|
|
insert into t1 values (1),(2);
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
select * from t1;
|
|
|
|
|
SET OPTION SQL_SELECT_LIMIT=1;
|
|
|
|
|
select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
SET OPTION SQL_SELECT_LIMIT=DEFAULT;
|
|
|
|
|
drop table t1;
|
2003-10-08 07:18:38 +02:00
|
|
|
|
|
2003-09-15 14:16:13 +02:00
|
|
|
|
#
|
|
|
|
|
# query cache crash on using same table twice in one query test
|
|
|
|
|
#
|
|
|
|
|
flush query cache;
|
|
|
|
|
reset query cache;
|
|
|
|
|
flush status;
|
|
|
|
|
set GLOBAL query_cache_size=1048576;
|
|
|
|
|
|
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
create table t2 (a text not null);
|
|
|
|
|
create table t3 (a text not null);
|
|
|
|
|
insert into t3 values("1111111111111111111111111111111111111111111111111111");
|
|
|
|
|
insert into t2 select * from t3;
|
|
|
|
|
insert into t3 select * from t2;
|
|
|
|
|
insert into t2 select * from t3;
|
|
|
|
|
insert into t3 select * from t2;
|
|
|
|
|
insert into t2 select * from t3;
|
|
|
|
|
insert into t3 select * from t2;
|
|
|
|
|
insert into t2 select * from t3;
|
|
|
|
|
insert into t3 select * from t2;
|
|
|
|
|
insert into t2 select * from t3;
|
|
|
|
|
insert into t3 select * from t2;
|
|
|
|
|
drop table t2;
|
|
|
|
|
create table t2 (a int not null);
|
|
|
|
|
insert into t2 values (1),(2),(3);
|
|
|
|
|
create table t4 (a int not null);
|
|
|
|
|
insert into t4 values (1),(2),(3);
|
|
|
|
|
|
|
|
|
|
disable_result_log;
|
|
|
|
|
select * from t4;
|
|
|
|
|
select * from t2;
|
|
|
|
|
select * from t1 as tt, t1 as ttt where tt.a=1 and ttt.a=2;
|
|
|
|
|
select * from t2;
|
|
|
|
|
select * from t4;
|
|
|
|
|
select * from t1 as tt, t1 as ttt where tt.a=1 and ttt.a=2;
|
|
|
|
|
select * from t2;
|
|
|
|
|
select * from t4;
|
|
|
|
|
select * from t1 as tt, t1 as ttt where tt.a=1 and ttt.a=2;
|
|
|
|
|
|
|
|
|
|
delete from t2 where a=1;
|
|
|
|
|
flush query cache;
|
|
|
|
|
select * from t3;
|
|
|
|
|
enable_result_log;
|
|
|
|
|
delete from t4 where a=1;
|
|
|
|
|
flush query cache;
|
|
|
|
|
drop table t1,t2,t3,t4;
|
2003-11-04 08:40:36 +01:00
|
|
|
|
|
2004-03-04 17:32:55 +01:00
|
|
|
|
#
|
|
|
|
|
# WRITE LOCK & QC
|
|
|
|
|
#
|
|
|
|
|
set query_cache_wlock_invalidate=1;
|
|
|
|
|
create table t1 (a int not null);
|
|
|
|
|
create table t2 (a int not null);
|
|
|
|
|
select * from t1;
|
|
|
|
|
select * from t2;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
lock table t1 write, t2 read;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
unlock table;
|
|
|
|
|
drop table t1,t2;
|
|
|
|
|
set query_cache_wlock_invalidate=default;
|
|
|
|
|
|
2004-10-21 22:56:12 +02:00
|
|
|
|
#
|
|
|
|
|
# hiding real table stored in query cache by temporary table
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 (id INT PRIMARY KEY);
|
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
|
select * from t1;
|
|
|
|
|
create temporary table t1 (a int not null auto_increment
|
|
|
|
|
primary key);
|
|
|
|
|
select * from t1;
|
|
|
|
|
drop table t1;
|
|
|
|
|
drop table t1;
|
2004-03-16 21:41:30 +01:00
|
|
|
|
|
2003-10-08 07:18:38 +02:00
|
|
|
|
#
|
|
|
|
|
# Test character set related variables:
|
|
|
|
|
# character_set_result
|
|
|
|
|
# character_set_client
|
|
|
|
|
# charactet_set_connection/collation_connection
|
|
|
|
|
# If at least one of the above variables has changed,
|
|
|
|
|
# the cached query can't be reused. In the below test
|
|
|
|
|
# absolutely the same query is used several times,
|
|
|
|
|
# SELECT should fetch different results for every instance.
|
|
|
|
|
# No hits should be produced.
|
|
|
|
|
# New cache entry should appear for every SELECT.
|
|
|
|
|
#
|
|
|
|
|
SET NAMES koi8r;
|
|
|
|
|
CREATE TABLE t1 (a char(1) character set koi8r);
|
|
|
|
|
INSERT INTO t1 VALUES (_koi8r'<27>'),(_koi8r'<27>');
|
|
|
|
|
#
|
|
|
|
|
# Run select
|
|
|
|
|
#
|
|
|
|
|
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
#
|
|
|
|
|
# Change collation_connection and run the same query again
|
|
|
|
|
#
|
|
|
|
|
set collation_connection=koi8r_bin;
|
|
|
|
|
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
#
|
|
|
|
|
# Now change character_set_client and run the same query again
|
|
|
|
|
#
|
|
|
|
|
set character_set_client=cp1251;
|
|
|
|
|
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
#
|
|
|
|
|
# And finally change character_set_results and run the same query again
|
|
|
|
|
#
|
|
|
|
|
set character_set_results=cp1251;
|
|
|
|
|
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
2003-10-22 16:10:22 +02:00
|
|
|
|
|
2003-10-08 07:18:38 +02:00
|
|
|
|
DROP TABLE t1;
|
2003-12-04 22:57:10 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# DROP current database test
|
2003-07-30 13:59:56 +02:00
|
|
|
|
#
|
2003-12-04 22:57:10 +01:00
|
|
|
|
CREATE TABLE t1 (a int(1));
|
|
|
|
|
CREATE DATABASE mysqltest;
|
|
|
|
|
USE mysqltest;
|
|
|
|
|
DROP DATABASE mysqltest;
|
|
|
|
|
SELECT * FROM test.t1;
|
|
|
|
|
USE test;
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
2004-03-30 22:38:56 +02:00
|
|
|
|
#
|
|
|
|
|
# charset with NULL
|
|
|
|
|
#
|
|
|
|
|
set character_set_results=null;
|
|
|
|
|
select @@character_set_results;
|
|
|
|
|
set character_set_results=default;
|
2004-09-10 15:28:18 +02:00
|
|
|
|
#
|
|
|
|
|
# query cache and environment variables
|
|
|
|
|
#
|
|
|
|
|
# max_sort_length
|
|
|
|
|
set GLOBAL query_cache_size=1355776;
|
|
|
|
|
create table t1 (id int auto_increment primary key, c char(25));
|
|
|
|
|
insert into t1 set c = repeat('x',24);
|
|
|
|
|
insert into t1 set c = concat(repeat('x',24),'x');
|
|
|
|
|
insert into t1 set c = concat(repeat('x',24),'w');
|
|
|
|
|
insert into t1 set c = concat(repeat('x',24),'y');
|
|
|
|
|
set max_sort_length=200;
|
|
|
|
|
select c from t1 order by c, id;
|
|
|
|
|
reset query cache;
|
|
|
|
|
set max_sort_length=20;
|
|
|
|
|
select c from t1 order by c, id;
|
|
|
|
|
set max_sort_length=200;
|
|
|
|
|
select c from t1 order by c, id;
|
|
|
|
|
set max_sort_length=default;
|
|
|
|
|
# sql_mode
|
|
|
|
|
select '1' || '3' from t1;
|
|
|
|
|
set SQL_MODE=oracle;
|
|
|
|
|
select '1' || '3' from t1;
|
|
|
|
|
set SQL_MODE=default;
|
|
|
|
|
drop table t1;
|
|
|
|
|
# group_concat_max_len
|
|
|
|
|
create table t1 (a varchar(20), b int);
|
|
|
|
|
insert into t1 values ('12345678901234567890', 1);
|
|
|
|
|
set group_concat_max_len=10;
|
|
|
|
|
select group_concat(a) FROM t1 group by b;
|
|
|
|
|
set group_concat_max_len=1024;
|
|
|
|
|
select group_concat(a) FROM t1 group by b;
|
|
|
|
|
set group_concat_max_len=default;
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2003-07-18 15:34:50 +02:00
|
|
|
|
# comments before command
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a int);
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
|
/**/ select * from t1;
|
|
|
|
|
/**/ select * from t1;
|
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
|
show status like "Qcache_hits";
|
2003-11-19 15:19:46 +01:00
|
|
|
|
|
2003-10-08 07:18:38 +02:00
|
|
|
|
#
|
|
|
|
|
# Keep things tidy
|
|
|
|
|
#
|
|
|
|
|
DROP TABLE t1;
|
2003-11-04 08:40:36 +01:00
|
|
|
|
SET GLOBAL query_cache_size=0;
|