Skip to content

Commit c306474

Browse files
author
Tor Didriksen
committed
WL#1509 Pack values of non-sorted fields in the sort buffer
New, complete patch, after pull from trunk.
1 parent a5352d8 commit c306474

34 files changed

+3291
-842
lines changed

mysql-test/r/filesort_merge.result

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
CREATE TABLE t1 (
2+
id int NOT NULL auto_increment PRIMARY KEY,
3+
b int NOT NULL,
4+
c datetime NOT NULL,
5+
INDEX idx_b(b),
6+
INDEX idx_c(c)
7+
) ENGINE=InnoDB;
8+
CREATE TABLE t2 (
9+
b int NOT NULL auto_increment PRIMARY KEY,
10+
c datetime NOT NULL
11+
) ENGINE= MyISAM;
12+
INSERT INTO t2(c) VALUES ('2007-01-01');
13+
INSERT INTO t2(c) SELECT c FROM t2;
14+
INSERT INTO t2(c) SELECT c FROM t2;
15+
INSERT INTO t2(c) SELECT c FROM t2;
16+
INSERT INTO t2(c) SELECT c FROM t2;
17+
INSERT INTO t2(c) SELECT c FROM t2;
18+
INSERT INTO t2(c) SELECT c FROM t2;
19+
INSERT INTO t2(c) SELECT c FROM t2;
20+
INSERT INTO t2(c) SELECT c FROM t2;
21+
INSERT INTO t2(c) SELECT c FROM t2;
22+
INSERT INTO t2(c) SELECT c FROM t2;
23+
INSERT INTO t1(b,c) SELECT b,c FROM t2;
24+
UPDATE t2 SET c='2007-01-02';
25+
INSERT INTO t1(b,c) SELECT b,c FROM t2;
26+
UPDATE t2 SET c='2007-01-03';
27+
INSERT INTO t1(b,c) SELECT b,c FROM t2;
28+
set @@sort_buffer_size=8192;
29+
Warnings:
30+
Warning 1292 Truncated incorrect sort_buffer_size value: '8192'
31+
SELECT COUNT(*) FROM t1;
32+
COUNT(*)
33+
3072
34+
EXPLAIN
35+
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c)
36+
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
37+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
38+
1 SIMPLE t1 NULL index_merge idx_b,idx_c idx_c,idx_b 5,4 NULL # 100.00 Using sort_union(idx_c,idx_b); Using where
39+
Warnings:
40+
Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` FORCE INDEX (`idx_c`) FORCE INDEX (`idx_b`) where (((`test`.`t1`.`c` >= '2007-01-02') and (`test`.`t1`.`c` <= '2007-01-03')) or (`test`.`t1`.`b` >= 1))
41+
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c)
42+
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
43+
COUNT(*)
44+
3072
45+
set @@sort_buffer_size=default;
46+
DROP TABLE t1,t2;
47+
set optimizer_switch='semijoin=off';
48+
set optimizer_switch='materialization=off';
49+
CREATE TABLE t1 (topic BIGINT NOT NULL DEFAULT 0);
50+
SET @@session.sort_buffer_size=32768;
51+
SELECT * from t1 WHERE topic IN
52+
(SELECT topic FROM t1 GROUP BY topic HAVING topic < 2000)
53+
LIMIT 2
54+
;
55+
topic
56+
1370
57+
1369
58+
SET @@session.sort_buffer_size=DEFAULT;
59+
drop table t1;
60+
set optimizer_switch=default;

mysql-test/r/filesort_pack.result

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
CREATE TABLE t1 (
2+
id int(10) unsigned NOT NULL auto_increment,
3+
k int(10) unsigned NOT NULL default '0',
4+
c char(120) NOT NULL default '',
5+
pad char(60) NOT NULL default '',
6+
PRIMARY KEY (id),
7+
KEY k (k)
8+
) engine=innodb;
9+
ANALYZE TABLE t1;
10+
Table Op Msg_type Msg_text
11+
test.t1 analyze status OK
12+
SET @@session.sort_buffer_size=32768;
13+
FLUSH STATUS;
14+
SHOW SESSION STATUS LIKE 'Sort%';
15+
Variable_name Value
16+
Sort_merge_passes 0
17+
Sort_range 0
18+
Sort_rows 0
19+
Sort_scan 0
20+
SELECT c FROM t1 WHERE id between 2 and 1002 ORDER BY c;
21+
SHOW SESSION STATUS LIKE 'Sort%';
22+
Variable_name Value
23+
Sort_merge_passes 0
24+
Sort_range 1
25+
Sort_rows 139
26+
Sort_scan 0
27+
SET @@session.sort_buffer_size=DEFAULT;
28+
DROP TABLE t1;

mysql-test/r/order_by_sortkey.result

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,18 @@ Sort_merge_passes 0
156156
Sort_range 0
157157
Sort_rows 100
158158
Sort_scan 1
159-
DROP TABLE t1, tmp;
159+
FLUSH STATUS;
160+
CREATE TABLE t2 (f1 int);
161+
INSERT INTO t2 VALUES (0), (0);
162+
SELECT * FROM t2 where f1 =
163+
(SELECT f2 from t1 where t1.f1 = t2.f1 ORDER BY f1 LIMIT 1);
164+
f1
165+
0
166+
0
167+
SHOW SESSION STATUS LIKE 'Sort%';
168+
Variable_name Value
169+
Sort_merge_passes 0
170+
Sort_range 0
171+
Sort_rows 2
172+
Sort_scan 2
173+
DROP TABLE t1, t2, tmp;

0 commit comments

Comments
 (0)