mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Import WL#7277 bulk insert creation tests from MySQL 5.7
This commit is contained in:
185
mysql-test/suite/innodb/include/innodb_bulk_create_index.inc
Normal file
185
mysql-test/suite/innodb/include/innodb_bulk_create_index.inc
Normal file
@ -0,0 +1,185 @@
|
||||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1(load_even INT)
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
IF i%2 = 0 AND load_even = 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
IF i%2 != 0 AND load_even != 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
SELECT @@innodb_fill_factor;
|
||||
|
||||
if ($row_format != 'COMPRESSED')
|
||||
{
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records
|
||||
CALL populate_t1(1);
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 5000;
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10000;
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10010;
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
/*Insert/Update/Delete. */
|
||||
DELETE FROM t1 WHERE id < 4010 AND id > 3990;
|
||||
INSERT INTO t1 VALUES(4000, 4000, 'b4000');
|
||||
UPDATE t1 SET title = CONCAT('b', id) WHERE id < 3010 AND id > 2990;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 3000;
|
||||
SELECT * FROM t1 WHERE title = 'a3000';
|
||||
SELECT * FROM t1 WHERE title = 'b3000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 4000;
|
||||
SELECT * FROM t1 WHERE title = 'a4000';
|
||||
SELECT * FROM t1 WHERE title = 'b4000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 4001;
|
||||
SELECT * FROM t1 WHERE title = 'a4001';
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records (follow up load)
|
||||
CALL populate_t1(0);
|
||||
-- enable_query_log
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
|
||||
/* Add column. */
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 5000;
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10000;
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10010;
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
/* Drop column. */
|
||||
ALTER TABLE t1 DROP COLUMN content;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 5000;
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10000;
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10010;
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Blob
|
||||
if ($row_format != 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b BLOB,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
let $cnt= 5000;
|
||||
-- disable_query_log
|
||||
WHILE ($cnt>=4950)
|
||||
{
|
||||
EVAL INSERT INTO t1 VALUES
|
||||
($cnt, REPEAT(CONCAT('a', $cnt),2000), CONCAT('a', $cnt));
|
||||
dec $cnt;
|
||||
}
|
||||
-- enable_query_log
|
||||
ALTER TABLE t1 ADD INDEX `idx` (a,b(5));
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
SELECT b=REPEAT(CONCAT('a',4975),2000) FROM t1 WHERE a=4975 AND b like 'a4975%';
|
||||
UPDATE t1 SET b = REPEAT(CONCAT('b',4975),2000) WHERE a=4975 AND b like 'a4975%';
|
||||
SELECT b=REPEAT(CONCAT('a',4975),2000) FROM t1 WHERE a=4975 AND b like 'a4975%';
|
||||
SELECT b=REPEAT(CONCAT('b',4975),2000) FROM t1 WHERE a=4975 AND b like 'b4975%';
|
||||
DELETE FROM t1 WHERE a=4975 AND b like 'b4975%';
|
||||
SELECT b=REPEAT(CONCAT('b',4975),2000) FROM t1 WHERE a=4975 AND b like 'b4975%';
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Restore global variables
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
}
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
@ -0,0 +1,221 @@
|
||||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
# Not supported in embedded
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# This test case needs to crash the server. Needs a debug server.
|
||||
-- source include/have_debug.inc
|
||||
|
||||
# Don't test this under valgrind, memory leaks will occur.
|
||||
-- source include/not_valgrind.inc
|
||||
|
||||
# Avoid CrashReporter popup on Mac
|
||||
-- source include/not_crashrep.inc
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
# Test scenarios:
|
||||
# 1. Test restart;
|
||||
# 2. Test crash recovery.
|
||||
|
||||
# Test Restart
|
||||
if ($row_format != 'COMPRESSED')
|
||||
{
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test Blob
|
||||
|
||||
if ($row_format != 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED') {
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Crash Recovery
|
||||
|
||||
if ($row_format != 'COMPRESSED')
|
||||
{
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
--error 2013
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
--enable_reconnect
|
||||
--source include/wait_until_connected_again.inc
|
||||
--disable_reconnect
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test Blob
|
||||
|
||||
if ($row_format != 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED') {
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
--error 2013
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--enable_reconnect
|
||||
--source include/wait_until_connected_again.inc
|
||||
--disable_reconnect
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Restore global variables
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
}
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
1061
mysql-test/suite/innodb/r/innodb_bulk_create_index.result
Normal file
1061
mysql-test/suite/innodb/r/innodb_bulk_create_index.result
Normal file
File diff suppressed because it is too large
Load Diff
501
mysql-test/suite/innodb/r/innodb_bulk_create_index_debug.result
Normal file
501
mysql-test/suite/innodb/r/innodb_bulk_create_index_debug.result
Normal file
@ -0,0 +1,501 @@
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_title idx_title 103 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`title` = 'a10')
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_title idx_title 103 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`title` = 'a10')
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_title idx_title 103 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`title` = 'a10')
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
# restart
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_title idx_title 103 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`title` = 'a10')
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
DROP PROCEDURE populate_t1;
|
@ -0,0 +1,53 @@
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
SET SESSION debug="+d,ib_index_build_fail_before_flush";
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
ERROR HY000: Got error 1000 from storage engine
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Got error 1000 from storage engine
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
CREATE FULLTEXT INDEX fidx_title ON t1(title);
|
||||
ERROR HY000: Got error 1000 from storage engine
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT;
|
||||
ERROR HY000: Got error 1000 from storage engine
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SET SESSION debug="-d,ib_index_build_fail_before_flush";
|
||||
INSERT INTO t1 VALUES(10001, 10001, 'a10000');
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_title(title);
|
||||
ERROR 23000: Duplicate entry 'a10000' for key 'idx_title'
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_id(id), ADD UNIQUE INDEX idx_title(title);
|
||||
ERROR 23000: Duplicate entry 'a10000' for key 'idx_title'
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
@ -0,0 +1,226 @@
|
||||
include/master-slave.inc
|
||||
Warnings:
|
||||
Note #### Sending passwords in plain text without SSL/TLS is extremely insecure.
|
||||
Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
|
||||
[connection master]
|
||||
CREATE PROCEDURE populate_t1(load_even INT)
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 100) DO
|
||||
IF i%2 = 0 AND load_even = 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
IF i%2 != 0 AND load_even != 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
50
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_id idx_id 5 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`id` = 10)
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_title idx_title 103 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`title` = 'a10')
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
/*Insert/Update/Delete. */
|
||||
DELETE FROM t1 WHERE id < 40 AND id > 30;
|
||||
INSERT INTO t1 VALUES(38, 38, 'b38');
|
||||
UPDATE t1 SET title = CONCAT('b', id) WHERE id < 30 AND id > 20;
|
||||
SELECT * FROM t1 WHERE id = 28;
|
||||
class id title
|
||||
28 28 b28
|
||||
SELECT * FROM t1 WHERE title = 'a28';
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'b28';
|
||||
class id title
|
||||
28 28 b28
|
||||
SELECT * FROM t1 WHERE id = 38;
|
||||
class id title
|
||||
38 38 b38
|
||||
SELECT * FROM t1 WHERE title = 'a38';
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'b38';
|
||||
class id title
|
||||
38 38 b38
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
97
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
CREATE TABLE t_part (
|
||||
class INT ,
|
||||
id INT ,
|
||||
title VARCHAR(30)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY KEY(id)
|
||||
SUBPARTITIONS 4
|
||||
(
|
||||
PARTITION p0 VALUES LESS THAN (5000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
INSERT INTO t_part SELECT * FROM t1;
|
||||
ALTER TABLE t_part ADD INDEX `idx` (class,id,title(10));
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
class id title
|
||||
include/sync_slave_sql_with_master.inc
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`class` int(11) DEFAULT NULL,
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`title` varchar(100) DEFAULT NULL,
|
||||
KEY `idx_id` (`id`),
|
||||
KEY `idx_title` (`title`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SHOW CREATE TABLE t_part;
|
||||
Table Create Table
|
||||
t_part CREATE TABLE `t_part` (
|
||||
`class` int(11) DEFAULT NULL,
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`title` varchar(30) DEFAULT NULL,
|
||||
KEY `idx` (`class`,`id`,`title`(10))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (id)
|
||||
SUBPARTITION BY KEY (id)
|
||||
SUBPARTITIONS 4
|
||||
(PARTITION p0 VALUES LESS THAN (5000) ENGINE = InnoDB,
|
||||
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
97
|
||||
SELECT COUNT(*) FROM t_part;
|
||||
COUNT(*)
|
||||
97
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
class id title
|
||||
DROP PROCEDURE populate_t1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t_part;
|
||||
include/rpl_end.inc
|
147
mysql-test/suite/innodb/r/innodb_bulk_create_index_small.result
Normal file
147
mysql-test/suite/innodb/r/innodb_bulk_create_index_small.result
Normal file
@ -0,0 +1,147 @@
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 1000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
SELECT @@innodb_fill_factor;
|
||||
@@innodb_fill_factor
|
||||
100
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1000
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_id idx_id 5 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`id` = 10)
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_title idx_title 103 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`title` = 'a10')
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
CHAR_LENGTH(b)
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1000
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_id idx_id 5 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`id` = 10)
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref idx_title idx_title 103 const 1 100.00 NULL
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`class` AS `class`,`test`.`t1`.`id` AS `id`,`test`.`t1`.`title` AS `title` from `test`.`t1` where (`test`.`t1`.`title` = 'a10')
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
CHAR_LENGTH(b)
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
DROP PROCEDURE populate_t1;
|
47
mysql-test/suite/innodb/t/innodb_bulk_create_index.test
Normal file
47
mysql-test/suite/innodb/t/innodb_bulk_create_index.test
Normal file
@ -0,0 +1,47 @@
|
||||
######## suite/innodb/t/innodb_bulk_create_index.test #####
|
||||
# #
|
||||
# Testcase for worklog WL#7277: InnoDB: Bulk Load for Create Index #
|
||||
# The basic idea of bulk load is to build an index from bottom up #
|
||||
# (also known as sorted index build). #
|
||||
# Earlier index was create by repeatedly inserting records #
|
||||
# Test scenario : #
|
||||
# - Run bulk create index on 10K rows #
|
||||
# - Run bulk create index on table with various row types #
|
||||
# - Run DML and SELECT after bulk index creation #
|
||||
# Creation: #
|
||||
# 2014-06-19 Implemented this test as part of WL#7277 #
|
||||
# #
|
||||
######################################################################
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_innodb_zip.inc
|
||||
-- source include/big_test.inc
|
||||
|
||||
# Test Row Format: REDUNDANT.
|
||||
let $row_format = REDUNDANT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Row Format: COMPACT.
|
||||
let $row_format = COMPACT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Row Format: DYNAMIC.
|
||||
let $row_format = DYNAMIC;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Row Format: COMPRESSED.
|
||||
let $row_format = COMPRESSED;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Fill Factor: 10
|
||||
let $row_format = COMPACT;
|
||||
SET GLOBAL innodb_fill_factor=10;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Fill Factor: 50
|
||||
let $row_format = COMPACT;
|
||||
SET GLOBAL innodb_fill_factor=50;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
SET GLOBAL innodb_fill_factor=default;
|
@ -0,0 +1,23 @@
|
||||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
# Test Restart & Crash Recovery.
|
||||
-- source include/big_test.inc
|
||||
-- source include/have_innodb_zip.inc
|
||||
|
||||
# Test Row Format: REDUNDANT.
|
||||
let $row_format = REDUNDANT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
||||
|
||||
# Test Row Format: COMPACT.
|
||||
let $row_format = COMPACT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
||||
|
||||
# Test Row Format: DYNAMIC.
|
||||
let $row_format = DYNAMIC;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
||||
|
||||
# Test Row Format: COMPRESSED.
|
||||
let $row_format = COMPRESSED;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
@ -0,0 +1,74 @@
|
||||
#
|
||||
# Test flush on error in bulk load to make sure we do a proper cleanup.
|
||||
# Note: We flush all dirty pages before applying any online log in bulk load.
|
||||
#
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_debug.inc
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
SET SESSION debug="+d,ib_index_build_fail_before_flush";
|
||||
|
||||
-- error ER_GET_ERRNO
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_GET_ERRNO
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_GET_ERRNO
|
||||
CREATE FULLTEXT INDEX fidx_title ON t1(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_GET_ERRNO
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SET SESSION debug="-d,ib_index_build_fail_before_flush";
|
||||
|
||||
INSERT INTO t1 VALUES(10001, 10001, 'a10000');
|
||||
|
||||
-- error ER_DUP_ENTRY
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_title(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_DUP_ENTRY
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_id(id), ADD UNIQUE INDEX idx_title(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
@ -0,0 +1,181 @@
|
||||
######## suite/innodb/t/innodb_wl7277_1.test #####
|
||||
# #
|
||||
# Testcase for worklog WL#7277: InnoDB: Bulk Load for Create Index #
|
||||
# The basic idea of bulk load is to build an index from bottom up #
|
||||
# (also known as sorted index build). #
|
||||
# Earlier index was create by repeatedly inserting records #
|
||||
# Test scenario : #
|
||||
# - Run bulk create index on replication setup #
|
||||
# - Run bulk create on partitioned table and see its replictaed #
|
||||
# to slave #
|
||||
# Creation: #
|
||||
# 2014-06-19 Implemented this test as part of WL#7277 #
|
||||
# #
|
||||
######################################################################
|
||||
|
||||
--source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
-- connection master
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1(load_even INT)
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 100) DO
|
||||
IF i%2 = 0 AND load_even = 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
IF i%2 != 0 AND load_even != 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ;
|
||||
|
||||
|
||||
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records
|
||||
CALL populate_t1(1);
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
/*Insert/Update/Delete. */
|
||||
DELETE FROM t1 WHERE id < 40 AND id > 30;
|
||||
INSERT INTO t1 VALUES(38, 38, 'b38');
|
||||
UPDATE t1 SET title = CONCAT('b', id) WHERE id < 30 AND id > 20;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 28;
|
||||
SELECT * FROM t1 WHERE title = 'a28';
|
||||
SELECT * FROM t1 WHERE title = 'b28';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 38;
|
||||
SELECT * FROM t1 WHERE title = 'a38';
|
||||
SELECT * FROM t1 WHERE title = 'b38';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records (follow up load)
|
||||
CALL populate_t1(0);
|
||||
-- enable_query_log
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
# Create partition table
|
||||
CREATE TABLE t_part (
|
||||
class INT ,
|
||||
id INT ,
|
||||
title VARCHAR(30)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY KEY(id)
|
||||
SUBPARTITIONS 4
|
||||
(
|
||||
PARTITION p0 VALUES LESS THAN (5000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
INSERT INTO t_part SELECT * FROM t1;
|
||||
ALTER TABLE t_part ADD INDEX `idx` (class,id,title(10));
|
||||
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
|
||||
|
||||
--source include/sync_slave_sql_with_master.inc
|
||||
-- connection slave
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE t_part;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t_part;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
|
||||
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
|
||||
|
||||
-- connection master
|
||||
DROP PROCEDURE populate_t1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t_part;
|
||||
--source include/rpl_end.inc
|
149
mysql-test/suite/innodb/t/innodb_bulk_create_index_small.test
Normal file
149
mysql-test/suite/innodb/t/innodb_bulk_create_index_small.test
Normal file
@ -0,0 +1,149 @@
|
||||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_innodb_zip.inc
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 1000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
SELECT @@innodb_fill_factor;
|
||||
|
||||
# Test Compact Table
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
|
||||
# Test Compressed Table
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Compression & Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
Reference in New Issue
Block a user