polardbxengine/mysql-test/suite/opt_trace/t/temp_table.test

102 lines
3.3 KiB
Plaintext

--source include/have_optimizer_trace.inc
--source include/have_64bit.inc
# Test requires: sp-protocol/ps-protocol/view-protocol/cursor-protocol disabled
--source include/no_protocol.inc
SET optimizer_trace_max_mem_size=1048576; # 1MB
SET optimizer_trace="enabled=on,one_line=off";
SET end_markers_in_json="on";
SET max_length_for_sort_data=1024;
CREATE TABLE tmp (
pk INT PRIMARY KEY AUTO_INCREMENT,
col1 CHAR (1)
);
INSERT INTO tmp(col1) VALUES ('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h');
CREATE TABLE t1 (
uniq VARCHAR(10),
col1 VARCHAR(10),
col2 VARCHAR(1024)
) CHARSET utf8mb4;
INSERT INTO t1 SELECT pk, col1, col1 FROM tmp;
--source include/turn_off_only_full_group_by.inc
# Uses MyISAM temporary table due to long VARCHAR in GROUP BY clause.
SELECT uniq, col1 FROM t1 GROUP BY col2,uniq LIMIT 3;
--replace_result InnoDB TMP_TABLE_ENGINE MyISAM TMP_TABLE_ENGINE
SELECT * FROM information_schema.OPTIMIZER_TRACE;
# Uses @internal_tmp_mem_storage_engine temporary table
--sorted_result
SELECT uniq, col1, col2 FROM t1 GROUP BY uniq ;
--replace_result InnoDB TMP_TABLE_ENGINE MyISAM TMP_TABLE_ENGINE
SELECT * FROM information_schema.OPTIMIZER_TRACE;
select @@tmp_table_size;
SET @old_size= @@tmp_table_size;
SET SESSION tmp_table_size= 1024;
SET SESSION internal_tmp_mem_storage_engine='memory';
INSERT INTO t1 SELECT pk+8, col1, col1 FROM tmp;
# Uses HEAP temporary table. Converts it to MyISAM due to heap size limitation
SELECT uniq, col1, col2 FROM t1 GROUP BY uniq;
--replace_result InnoDB TMP_TABLE_ENGINE MyISAM TMP_TABLE_ENGINE
SELECT * FROM information_schema.OPTIMIZER_TRACE;
SET SESSION internal_tmp_mem_storage_engine=default;
SET GLOBAL tmp_table_size= @old_size;
# Temp tables for I_S tables. Uses HEAP temporary table.
# Converts it to MyISAM packed record format due to heap size limitation
SELECT pool_id FROM information_schema.INNODB_BUFFER_PAGE LIMIT 1;
--replace_result InnoDB TMP_TABLE_ENGINE MyISAM TMP_TABLE_ENGINE innodb_buffer_page INNODB_BUFFER_PAGE
SELECT * FROM information_schema.OPTIMIZER_TRACE;
--source include/restore_sql_mode_after_turn_off_only_full_group_by.inc
DROP TABLE t1, tmp;
--echo #
--echo # Bug#17231940: THE OPTIMIZER STILL USES FIXED LENGTH TEMPORARY TABLES
--echo # ON DISK
--echo #
CREATE TABLE t1 (
c1 INT AUTO_INCREMENT PRIMARY KEY,
c2 VARCHAR(250)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO t1(c2) VALUES ('b'),('b');
INSERT INTO t1(c2) SELECT t1.c2 FROM t1, t1 t2, t1 t3, t1 t4, t1 t5, t1 t6;
SET @@max_heap_table_size=1;
SET @@group_concat_max_len= 500;
SET SESSION internal_tmp_mem_storage_engine='memory';
# This query creates 4 tmp tables, 3 of them aren''t packed without this
# fix.
# Purpose Format without fix / with fix
# union result fixed packed
# derived tbl result fixed packed
# join materialization fixed packed
# group_concat internal tbl packed packed (not shown in the opt trace)
--sorted_result
SELECT c1,GROUP_CONCAT(c2) cc FROM
(SELECT * FROM t1 UNION SELECT c1, 'a' FROM t1) tt
GROUP BY c1
ORDER BY cc;
--replace_result InnoDB TMP_TABLE_ENGINE MyISAM TMP_TABLE_ENGINE
--replace_regex /("peak_memory_used":) [0-9]+/\1 "NNN"/
SELECT * FROM information_schema.OPTIMIZER_TRACE;
DROP TABLE t1;
--echo #
# Clean up.
SET SESSION internal_tmp_mem_storage_engine=default;
SET max_length_for_sort_data=DEFAULT;