Files

358 lines
18 KiB
Plaintext

# TestIssue25527
drop table if exists t, t0, t1, t2;
set @@tidb_partition_prune_mode = 'dynamic';
CREATE TABLE t (
col1 tinyint(4) primary key
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH( COL1 DIV 80 )
PARTITIONS 6;
insert into t values(-128), (107);
prepare stmt from 'select col1 from t where col1 in (?, ?, ?)';
set @a=-128, @b=107, @c=-128;
--sorted_result
execute stmt using @a,@b,@c;
CREATE TABLE t0 (a int primary key) PARTITION BY HASH( a DIV 80 ) PARTITIONS 2;
insert into t0 values (1);
select a from t0 where a in (1);
create table t1 (a int primary key) partition by range (a+5) (
partition p0 values less than(10), partition p1 values less than(20));
insert into t1 values (5);
select a from t1 where a in (5);
create table t2 (a int primary key) partition by list (a+5) (
partition p0 values in (5, 6, 7, 8), partition p1 values in (9, 10, 11, 12));
insert into t2 values (5);
select a from t2 where a in (5);
set @@tidb_partition_prune_mode = default;
# TestIssue25598
drop table if exists UK_HP16726;
CREATE TABLE UK_HP16726 (
COL1 bigint(16) DEFAULT NULL,
COL2 varchar(20) DEFAULT NULL,
COL4 datetime DEFAULT NULL,
COL3 bigint(20) DEFAULT NULL,
COL5 float DEFAULT NULL,
UNIQUE KEY UK_COL1 (COL1) /*!80000 INVISIBLE */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY HASH( COL1 )
PARTITIONS 25;
select t1. col1, t2. col1 from UK_HP16726 as t1 inner join UK_HP16726 as t2 on t1.col1 = t2.col1 where t1.col1 > -9223372036854775808 group by t1.col1, t2.col1 having t1.col1 != 9223372036854775807;
explain format='plan_tree' select t1. col1, t2. col1 from UK_HP16726 as t1 inner join UK_HP16726 as t2 on t1.col1 = t2.col1 where t1.col1 > -9223372036854775808 group by t1.col1, t2.col1 having t1.col1 != 9223372036854775807;
set @@tidb_partition_prune_mode = 'dynamic';
analyze table UK_HP16726;
select t1. col1, t2. col1 from UK_HP16726 as t1 inner join UK_HP16726 as t2 on t1.col1 = t2.col1 where t1.col1 > -9223372036854775808 group by t1.col1, t2.col1 having t1.col1 != 9223372036854775807;
explain format='plan_tree' select t1. col1, t2. col1 from UK_HP16726 as t1 inner join UK_HP16726 as t2 on t1.col1 = t2.col1 where t1.col1 > -9223372036854775808 group by t1.col1, t2.col1 having t1.col1 != 9223372036854775807;
set @@tidb_partition_prune_mode = default;
# TestIssue25253
drop table if exists IDT_HP23902, t;
CREATE TABLE IDT_HP23902 (
COL1 smallint DEFAULT NULL,
COL2 varchar(20) DEFAULT NULL,
COL4 datetime DEFAULT NULL,
COL3 bigint DEFAULT NULL,
COL5 float DEFAULT NULL,
KEY UK_COL1 (COL1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY HASH( COL1+30 )
PARTITIONS 6;
insert ignore into IDT_HP23902 partition(p0, p1)(col1, col3) values(-10355, 1930590137900568573), (13810, -1332233145730692137);
show warnings;
select * from IDT_HP23902;
create table t (
a int
) partition by range(a) (
partition p0 values less than (10),
partition p1 values less than (20));
insert ignore into t partition(p0)(a) values(12);
show warnings;
select * from t;
# TestIssue25030
drop table if exists tbl_936;
set @@tidb_partition_prune_mode = 'dynamic';
CREATE TABLE tbl_936 (
col_5410 smallint NOT NULL,
col_5411 double,
col_5412 boolean NOT NULL DEFAULT 1,
col_5413 set('Alice', 'Bob', 'Charlie', 'David') NOT NULL DEFAULT 'Charlie',
col_5414 varbinary(147) COLLATE 'binary' DEFAULT 'bvpKgYWLfyuTiOYSkj',
col_5415 timestamp NOT NULL DEFAULT '2021-07-06',
col_5416 decimal(6, 6) DEFAULT 0.49,
col_5417 text COLLATE utf8_bin,
col_5418 float DEFAULT 2048.0762299371554,
col_5419 int UNSIGNED NOT NULL DEFAULT 3152326370,
PRIMARY KEY (col_5419) )
PARTITION BY HASH (col_5419) PARTITIONS 3;
SELECT last_value(col_5414) OVER w FROM tbl_936
WINDOW w AS (ORDER BY col_5410, col_5411, col_5412, col_5413, col_5414, col_5415, col_5416, col_5417, col_5418, col_5419)
ORDER BY col_5410, col_5411, col_5412, col_5413, col_5414, col_5415, col_5416, col_5417, col_5418, col_5419, nth_value(col_5412, 5) OVER w;
set @@tidb_partition_prune_mode = default;
# TestIssue24636
drop table if exists t;
CREATE TABLE t (a int, b date, c int, PRIMARY KEY (a,b))
PARTITION BY RANGE ( TO_DAYS(b) ) (
PARTITION p0 VALUES LESS THAN (737821),
PARTITION p1 VALUES LESS THAN (738289)
);
INSERT INTO t (a, b, c) VALUES(0, '2021-05-05', 0);
select c from t use index(primary) where a=0 limit 1;
CREATE TABLE test_partition (
a varchar(100) NOT NULL,
b date NOT NULL,
c varchar(100) NOT NULL,
d datetime DEFAULT NULL,
e datetime DEFAULT NULL,
f bigint(20) DEFAULT NULL,
g bigint(20) DEFAULT NULL,
h bigint(20) DEFAULT NULL,
i bigint(20) DEFAULT NULL,
j bigint(20) DEFAULT NULL,
k bigint(20) DEFAULT NULL,
l bigint(20) DEFAULT NULL,
PRIMARY KEY (a,b,c) /*T![clustered_index] NONCLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY RANGE ( TO_DAYS(b) ) (
PARTITION pmin VALUES LESS THAN (737821),
PARTITION p20200601 VALUES LESS THAN (738289));
INSERT INTO test_partition (a, b, c, d, e, f, g, h, i, j, k, l) VALUES('aaa', '2021-05-05', '428ff6a1-bb37-42ac-9883-33d7a29961e6', '2021-05-06 08:13:38', '2021-05-06 13:28:08', 0, 8, 3, 0, 9, 1, 0);
select c,j,l from test_partition where c='428ff6a1-bb37-42ac-9883-33d7a29961e6' and a='aaa' limit 0, 200;
# TestIssue25309
drop table if exists tbl_500, tbl_600;
set @@tidb_partition_prune_mode = 'dynamic';
CREATE TABLE tbl_500 (
col_20 tinyint(4) NOT NULL,
col_21 varchar(399) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
col_22 json DEFAULT NULL,
col_23 blob DEFAULT NULL,
col_24 mediumint(9) NOT NULL,
col_25 float NOT NULL DEFAULT '7306.384497585912',
col_26 binary(196) NOT NULL,
col_27 timestamp DEFAULT '1976-12-08 00:00:00',
col_28 bigint(20) NOT NULL,
col_29 tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (col_29,col_20) /*T![clustered_index] NONCLUSTERED */,
KEY idx_7 (col_28,col_20,col_26,col_27,col_21,col_24),
KEY idx_8 (col_25,col_29,col_24)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
CREATE TABLE tbl_600 (
col_60 int(11) NOT NULL DEFAULT '-776833487',
col_61 tinyint(1) NOT NULL DEFAULT '1',
col_62 tinyint(4) NOT NULL DEFAULT '-125',
PRIMARY KEY (col_62,col_60,col_61) /*T![clustered_index] NONCLUSTERED */,
KEY idx_19 (col_60)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
PARTITION BY HASH( col_60 )
PARTITIONS 1;
insert into tbl_500 select -34, 'lrfGPPPUuZjtT', '{"obj1": {"sub_obj0": 100}}', 0x6C47636D, 1325624, 7306.3843, 'abc', '1976-12-08', 4757891479624162031, 0;
select tbl_5.* from tbl_500 tbl_5 where col_24 in ( select col_62 from tbl_600 where tbl_5.col_26 < 'hSvHLdQeGBNIyOFXStV' );
set @@tidb_partition_prune_mode = default;
# TestIssue20028
drop table if exists t1, t2;
set @@tidb_partition_prune_mode='static-only';
create table t1 (c_datetime datetime, primary key (c_datetime))
partition by range (to_days(c_datetime)) ( partition p0 values less than (to_days('2020-02-01')),
partition p1 values less than (to_days('2020-04-01')),
partition p2 values less than (to_days('2020-06-01')),
partition p3 values less than maxvalue);
create table t2 (c_datetime datetime, unique key(c_datetime));
insert into t1 values ('2020-06-26 03:24:00'), ('2020-02-21 07:15:33'), ('2020-04-27 13:50:58');
insert into t2 values ('2020-01-10 09:36:00'), ('2020-02-04 06:00:00'), ('2020-06-12 03:45:18');
begin;
--sorted_result
select * from t1 join t2 on t1.c_datetime >= t2.c_datetime for update;
rollback;
set @@tidb_partition_prune_mode = default;
# TestIssue21731
drop table if exists p, t;
set tidb_enable_global_index = 1;
create table t (a int, b int, unique index idx(a) global) partition by list columns(b) (partition p0 values in (1), partition p1 values in (2));
drop table t;
set tidb_enable_global_index = default;
# TestIssue25528
drop table if exists issue25528;
set @@tidb_partition_prune_mode = 'static';
create table issue25528 (id int primary key, balance DECIMAL(10, 2), balance2 DECIMAL(10, 2) GENERATED ALWAYS AS (-balance) VIRTUAL, created_at TIMESTAMP) PARTITION BY HASH(id) PARTITIONS 8;
insert into issue25528 (id, balance, created_at) values(1, 100, '2021-06-17 22:35:20');
begin pessimistic;
select * from issue25528 where id = 1 for update;
drop table if exists issue25528;
CREATE TABLE `issue25528` ( `c1` int(11) NOT NULL, `c2` int(11) DEFAULT NULL, `c3` int(11) DEFAULT NULL, `c4` int(11) DEFAULT NULL, PRIMARY KEY (`c1`) /*T![clustered_index] CLUSTERED */, KEY `k2` (`c2`), KEY `k3` (`c3`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH( `c1` ) PARTITIONS 10;
INSERT INTO issue25528 (`c1`, `c2`, `c3`, `c4`) VALUES (1, 1, 1, 1) , (3, 3, 3, 3) , (2, 2, 2, 2) , (4, 4, 4, 4);
select * from issue25528 where c1 in (3, 4) order by c2 for update;
rollback;
# TestIssue27346
set @@tidb_enable_index_merge=1,@@tidb_partition_prune_mode='dynamic';
DROP TABLE IF EXISTS `tbl_18`;
CREATE TABLE `tbl_18` (`col_119` binary(16) NOT NULL DEFAULT 'skPoKiwYUi',`col_120` int(10) unsigned NOT NULL,`col_121` timestamp NOT NULL,`col_122` double NOT NULL DEFAULT '3937.1887880628115',`col_123` bigint(20) NOT NULL DEFAULT '3550098074891542725',PRIMARY KEY (`col_123`,`col_121`,`col_122`,`col_120`) CLUSTERED,UNIQUE KEY `idx_103` (`col_123`,`col_119`,`col_120`),UNIQUE KEY `idx_104` (`col_122`,`col_120`),UNIQUE KEY `idx_105` (`col_119`,`col_120`),KEY `idx_106` (`col_121`,`col_120`,`col_122`,`col_119`),KEY `idx_107` (`col_121`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci PARTITION BY HASH( `col_120` ) PARTITIONS 3;
INSERT INTO tbl_18 (`col_119`, `col_120`, `col_121`, `col_122`, `col_123`) VALUES (X'736b506f4b6977595569000000000000', 672436701, '1974-02-24 00:00:00', 3937.1887880628115e0, -7373106839136381229), (X'736b506f4b6977595569000000000000', 2637316689, '1993-10-29 00:00:00', 3937.1887880628115e0, -4522626077860026631), (X'736b506f4b6977595569000000000000', 831809724, '1995-11-20 00:00:00', 3937.1887880628115e0, -4426441253940231780), (X'736b506f4b6977595569000000000000', 1588592628, '2001-03-28 00:00:00', 3937.1887880628115e0, 1329207475772244999), (X'736b506f4b6977595569000000000000', 3908038471, '2031-06-06 00:00:00', 3937.1887880628115e0, -6562815696723135786), (X'736b506f4b6977595569000000000000', 1674237178, '2001-10-24 00:00:00', 3937.1887880628115e0, -6459065549188938772), (X'736b506f4b6977595569000000000000', 3507075493, '2010-03-25 00:00:00', 3937.1887880628115e0, -4329597025765326929), (X'736b506f4b6977595569000000000000', 1276461709, '2019-07-20 00:00:00', 3937.1887880628115e0, 3550098074891542725);
--sorted_result
select col_120,col_122,col_123 from tbl_18 where tbl_18.col_122 = 4763.320888074281 and not( tbl_18.col_121 in ( '2032-11-01' , '1975-05-21' , '1994-05-16' , '1984-01-15' ) ) or not( tbl_18.col_121 >= '2008-10-24' ) order by tbl_18.col_119,tbl_18.col_120,tbl_18.col_121,tbl_18.col_122,tbl_18.col_123 limit 919 for update;
--sorted_result
select /*+ use_index_merge( tbl_18 ) */ col_120,col_122,col_123 from tbl_18 where tbl_18.col_122 = 4763.320888074281 and not( tbl_18.col_121 in ( '2032-11-01' , '1975-05-21' , '1994-05-16' , '1984-01-15' ) ) or not( tbl_18.col_121 >= '2008-10-24' ) order by tbl_18.col_119,tbl_18.col_120,tbl_18.col_121,tbl_18.col_122,tbl_18.col_123 limit 919 for update;
set @@tidb_enable_index_merge=default,@@tidb_partition_prune_mode=default;
# TestIssue35181
drop table if exists t;
CREATE TABLE `t` (`a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL) PARTITION BY RANGE (`a`) (PARTITION `p0` VALUES LESS THAN (2021), PARTITION `p1` VALUES LESS THAN (3000));
set @@tidb_partition_prune_mode = 'static';
insert into t select * from t where a=3000;
set @@tidb_partition_prune_mode = 'dynamic';
insert into t select * from t where a=3000;
set @@tidb_partition_prune_mode = default;
# TestIssue39999
set @@tidb_opt_advanced_join_hint=0;
drop table if exists c, t;
CREATE TABLE `c` (`serial_id` varchar(24),`occur_trade_date` date,`txt_account_id` varchar(24),`capital_sub_class` varchar(10),`occur_amount` decimal(16,2),`broker` varchar(10),PRIMARY KEY (`txt_account_id`,`occur_trade_date`,`serial_id`) /*T![clustered_index] CLUSTERED */,KEY `idx_serial_id` (`serial_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PARTITION BY RANGE COLUMNS(`serial_id`) (PARTITION `p202209` VALUES LESS THAN ('20221001'),PARTITION `p202210` VALUES LESS THAN ('20221101'),PARTITION `p202211` VALUES LESS THAN ('20221201'));
CREATE TABLE `t` ( `txn_account_id` varchar(24), `account_id` varchar(32), `broker` varchar(10), PRIMARY KEY (`txn_account_id`) /*T![clustered_index] CLUSTERED */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `c` (serial_id, txt_account_id, capital_sub_class, occur_trade_date, occur_amount, broker) VALUES ('2022111700196920','04482786','CUST','2022-11-17',-2.01,'0009');
INSERT INTO `t` VALUES ('04482786','1142927','0009');
set tidb_partition_prune_mode='dynamic';
analyze table c all columns;
analyze table t all columns;
explain format='plan_tree' select
/*+ inl_join(c) */
c.occur_amount
from
c
join t on c.txt_account_id = t.txn_account_id
and t.broker = '0009'
and c.occur_trade_date = '2022-11-17';
select
/*+ inl_join(c) */
c.occur_amount
from
c
join t on c.txt_account_id = t.txn_account_id
and t.broker = '0009'
and c.occur_trade_date = '2022-11-17';
alter table t add column serial_id varchar(24) default '2022111700196920';
select
/*+ inl_join(c) */
c.occur_amount
from
c
join t on c.txt_account_id = t.txn_account_id
and t.broker = '0009'
and c.occur_trade_date = '2022-11-17' and c.serial_id = t.serial_id;
explain format='plan_tree' select
/*+ inl_join(c) */
c.occur_amount
from
c
join t on c.txt_account_id = t.txn_account_id
and t.broker = '0009'
and c.occur_trade_date = '2022-11-17' and c.serial_id = t.serial_id;
set @@tidb_opt_advanced_join_hint=default;
set tidb_partition_prune_mode=default;
# TestIssue49842
## For Hash partition
drop table if exists t;
CREATE TABLE `t` (
`col_51` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`col_51`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY HASH (`col_51`) PARTITIONS 5;
insert into t values (9223372036854775807), (9223372036854775808), (9223372036854775809), (9223372036854775812), (9223372036854775813);
analyze table t;
desc SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN 9223372036854775807 AND 9223372036854775808;
--sorted_result
SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN 9223372036854775807 AND 9223372036854775808;
explain format='plan_tree' select * from t where col_51 between 9223372036854775812 and 9223372036854775813;
--sorted_result
select * from t where col_51 between 9223372036854775812 and 9223372036854775813;
drop table if exists t;
CREATE TABLE `t` (
`col_51` bigint(20) NOT NULL,
PRIMARY KEY (`col_51`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY HASH (`col_51`) PARTITIONS 5;
insert into t values (9223372036854775807), (-9223372036854775808);
analyze table t;
desc SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN -9223372036854775808 AND 9223372036854775807;
--sorted_result
SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN -9223372036854775808 AND 9223372036854775807;
## For Key partition
drop table if exists t;
CREATE TABLE `t` (
`col_51` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`col_51`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY KEY (`col_51`) PARTITIONS 5;
insert into t values (9223372036854775807), (9223372036854775808), (9223372036854775809);
analyze table t;
desc SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN 9223372036854775807 AND 9223372036854775808;
--sorted_result
SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN 9223372036854775807 AND 9223372036854775808;
drop table if exists t;
CREATE TABLE `t` (
`col_51` bigint(20) NOT NULL,
PRIMARY KEY (`col_51`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY KEY (`col_51`) PARTITIONS 5;
insert into t values (9223372036854775807), (-9223372036854775808);
analyze table t;
desc SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN -9223372036854775808 AND 9223372036854775807;
--sorted_result
SELECT * FROM `t` WHERE `t`.`col_51` BETWEEN -9223372036854775808 AND 9223372036854775807;
# TestIssue50044
drop table if exists t;
CREATE TABLE `t` (
`col_29` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
PARTITION BY HASH (`col_29`) PARTITIONS 7;
INSERT INTO `t` VALUES (-1), (11), (-128), (39), (-46), (38), (-102), (-99), (-87), (-127), (-89), (43), (108), (59), (0), (24), (101), (37), (-103), (90), (-95), (-44), (123), (124), (-123), (-52), (-49), (-98), (-104), (-68), (2), (-24), (67), (89), (1), (-65), (36), (-109), (41), (5), (98), (-63), (-14), (127), (-6), (121), (14), (-122);
analyze table t all columns;
explain format='plan_tree' select * from t where col_29 between -2 and -1;
--sorted_result
select * from t where col_29 between -2 and -1;
explain format='plan_tree' select * from t where col_29 between -2 and 0;
--sorted_result
select * from t where col_29 between -2 and 0;
explain format='plan_tree' select * from t where col_29 between -2 and 1;
--sorted_result
select * from t where col_29 between -2 and 1;
# TestIssue50427
explain format='plan_tree' select * from t where col_29 between -7 and -6;
--sorted_result
select * from t where col_29 between -7 and -6;
# TestIssue52198
create table issue52198 (a int, b int, primary key (b)) partition by hash(b) partitions 5;
insert into issue52198 values (1,1);
select space(1), b from issue52198 where b in (1);
drop table issue52198;
# TestIssues54667
drop table if exists t;
set tidb_partition_prune_mode=static;
CREATE TABLE t (
a text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
b mediumint(8) unsigned NOT NULL DEFAULT '11075363',
c tinyblob NOT NULL,
PRIMARY KEY (b) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
PARTITION BY KEY (b) PARTITIONS 7;
insert into t values ('a' ,6970066, 'a');
update t set c = 'AH6' where b in ( 7691699 ,11807884 ,10523838 ,15662349 ,6970066 );
drop table t;
set tidb_partition_prune_mode=default;