# # Bug 23333990 PERSISTENT INDEX STATISTICS UPDATE BEFORE # TRANSACTION IS COMMITTED # "Test 1:- Uncommited delete test" CREATE TABLE t1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT UNSIGNED NOT NULL, INDEX (val)) ENGINE=INNODB STATS_PERSISTENT=1,STATS_AUTO_RECALC=1; INSERT INTO t1 (val) VALUES (CEIL(RAND()*20)); INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1; SELECT COUNT(*) FROM t1; COUNT(*) 262144 ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK connect con1, localhost, root,,; START TRANSACTION; DELETE FROM t1; SELECT COUNT(*) FROM t1; connection default; Test correctly estimates the number of rows as > 20000 even when in other uncommmited transaction all rows have been deleted. connection con1; COUNT(*) 0 commit; connection default; Test 2:- Insert and rollback test CREATE TABLE t2 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT UNSIGNED NOT NULL, INDEX (val)) ENGINE=INNODB STATS_PERSISTENT=1,STATS_AUTO_RECALC=1; connection con1; START TRANSACTION; INSERT INTO t2 (val) VALUES (CEIL(RAND()*20)); INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2; SELECT COUNT(*) FROM t2; connection default; select count(*) from t2; count(*) 0 Test correctly estimates the number of rows as > 20000 even when in other uncommited transaction many rows are inserted. connection con1; COUNT(*) 262144 Rollback the insert rollback; disconnect con1; connection default; Test correctly estimates the number of rows as 1 after rollback. DROP TABLE t1,t2;