mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 11:31:51 +01:00
96e092dc73
WL#2474 "Multi Range Read: Change the default MRR implementation to implement new MRR interface" WL#2475 "Batched range read functions for MyISAM/InnoDb" "Index condition pushdown for MyISAM/InnoDB" Igor's fix from sp1r-igor@olga.mysql.com-20080330055902-07614: There could be observed the following problems: 1. EXPLAIN did not mention pushdown conditions from on expressions in the 'extra' column. As a result if a query had no where conditions pushed down to a table, but had on conditions pushed to this table the 'extra' column in the EXPLAIN for the table missed 'using where'. 2. Conditions for ref access were not eliminated from on expressions though such conditions were eliminated from the where condition.
97 lines
5.6 KiB
Text
97 lines
5.6 KiB
Text
set storage_engine=innodb;
|
|
set session debug="+d,optimizer_innodb_icp";
|
|
CREATE TABLE t1(c1 TIMESTAMP NOT NULL, c2 TIMESTAMP NULL, c3 DATE, c4 DATETIME, PRIMARY KEY(c1), UNIQUE INDEX(c2));
|
|
INSERT INTO t1 VALUES('98-12-31 11:30:45','98.12.31 11+30+45','98-12-31 11:30:45','98.12.31 11+30+45'),('98/12/30 11*30*45','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45'),('98-12-29','98.12.29','98-12-29','98.12.29'),('98/12/28','98@12@28','98/12/28','98@12@28');
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'c3' at row 1
|
|
Note 1265 Data truncated for column 'c3' at row 2
|
|
INSERT INTO t1 VALUES('20070523091528','070523091528','20070524091528','070524091528'),('20070525','070525','20070526','070526');
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'c3' at row 1
|
|
INSERT INTO t1 VALUES(19830905132800,830905132800,19830906132800,830906132800),(19830907,830907,19830908,830908);
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'c3' at row 1
|
|
SET TIMESTAMP=1233216687;
|
|
INSERT INTO t1 VALUES(NOW(),CURRENT_DATE,NOW(),CURRENT_DATE);
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'c3' at row 1
|
|
INSERT INTO t1 VALUES('2008-01-01',NULL,'08-01-02','08/01/03');
|
|
INSERT INTO t1(c1,c2) VALUES('08/01/17',NULL);
|
|
DELETE FROM t1 WHERE c1='08/01/17' AND c2 IS NULL;
|
|
INSERT INTO t1 VALUES('','','08-01-04','08/01/05') /* Inserts zero dates for '' strings */;
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'c1' at row 1
|
|
Warning 1265 Data truncated for column 'c2' at row 1
|
|
SELECT * FROM t1;
|
|
c1 c2 c3 c4
|
|
0000-00-00 00:00:00 0000-00-00 00:00:00 2008-01-04 2008-01-05 00:00:00
|
|
1983-09-05 13:28:00 1983-09-05 13:28:00 1983-09-06 1983-09-06 13:28:00
|
|
1983-09-07 00:00:00 1983-09-07 00:00:00 1983-09-08 1983-09-08 00:00:00
|
|
1998-12-28 00:00:00 1998-12-28 00:00:00 1998-12-28 1998-12-28 00:00:00
|
|
1998-12-29 00:00:00 1998-12-29 00:00:00 1998-12-29 1998-12-29 00:00:00
|
|
1998-12-30 11:30:45 1998-12-30 11:30:45 1998-12-30 1998-12-30 11:30:45
|
|
1998-12-31 11:30:45 1998-12-31 11:30:45 1998-12-31 1998-12-31 11:30:45
|
|
2007-05-23 09:15:28 2007-05-23 09:15:28 2007-05-24 2007-05-24 09:15:28
|
|
2007-05-25 00:00:00 2007-05-25 00:00:00 2007-05-26 2007-05-26 00:00:00
|
|
2008-01-01 00:00:00 NULL 2008-01-02 2008-01-03 00:00:00
|
|
2009-01-29 11:11:27 2009-01-29 00:00:00 2009-01-29 2009-01-29 00:00:00
|
|
INSERT IGNORE INTO t1(c1,c2) VALUES('20070525','20070527') /* doesn't throw error */;
|
|
|
|
# Ignore unique constraint
|
|
INSERT IGNORE INTO t1(c1,c2) VALUES(19840905,830907) /* doesn't throw error */;
|
|
SELECT * FROM t1 WHERE c1='20070527' /* Returns no rows */;
|
|
c1 c2 c3 c4
|
|
INSERT INTO t1(c1) VALUES('20070525') ON DUPLICATE KEY UPDATE c1='20070527';
|
|
SELECT * FROM t1 WHERE c1='20070527' /* Returns 1 row with c1=2007-05-27 */;
|
|
c1 c2 c3 c4
|
|
2007-05-27 00:00:00 2007-05-25 00:00:00 2007-05-26 2007-05-26 00:00:00
|
|
SELECT * FROM t1 WHERE c1=19830909 AND c2=830910 /* Returns no rows */;
|
|
c1 c2 c3 c4
|
|
INSERT INTO t1(c1,c2) VALUES(19840905,830907) ON DUPLICATE KEY UPDATE c1=19830909,c2=830910;
|
|
SELECT * FROM t1 WHERE c1=19830909 AND c2=830910 /* Returns 1 row */;
|
|
c1 c2 c3 c4
|
|
1983-09-09 00:00:00 1983-09-10 00:00:00 1983-09-08 1983-09-08 00:00:00
|
|
INSERT INTO t1 SET c1='1999-01-01',c2='1999-01-01';
|
|
SELECT * FROM t1 WHERE c1='1999-01-01' AND c2='1999-01-01' /* Returns 1 row with values for other column as NULL */;
|
|
c1 c2 c3 c4
|
|
1999-01-01 00:00:00 1999-01-01 00:00:00 NULL NULL
|
|
INSERT INTO t1 VALUES('1971-01-01 00:00:01','1980-01-01 00:00:01','2009-01-01','2009-01-02'),('1990-01-01 00:00:01','2000-01-01 00:00:01','2009-01-03','2009-01-04'),('2038-01-09 03:14:07','2038-01-09 03:14:07','2009-01-05','2009-01-06');
|
|
DELETE FROM t1 WHERE c1=NOW() /* because the row with current timestamp exists */;
|
|
INSERT INTO t1 VALUES(NULL,NOW(),NOW(),NOW());
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'c3' at row 1
|
|
SELECT * FROM t1 WHERE c1 IS NULL /* returns no rows */;
|
|
c1 c2 c3 c4
|
|
SELECT * FROM t1 WHERE c1=NOW() /* returns 1 row */;
|
|
c1 c2 c3 c4
|
|
2009-01-29 11:11:27 2009-01-29 11:11:27 2009-01-29 2009-01-29 11:11:27
|
|
SELECT * FROM t1;
|
|
c1 c2 c3 c4
|
|
0000-00-00 00:00:00 0000-00-00 00:00:00 2008-01-04 2008-01-05 00:00:00
|
|
1971-01-01 00:00:01 1980-01-01 00:00:01 2009-01-01 2009-01-02 00:00:00
|
|
1983-09-05 13:28:00 1983-09-05 13:28:00 1983-09-06 1983-09-06 13:28:00
|
|
1983-09-09 00:00:00 1983-09-10 00:00:00 1983-09-08 1983-09-08 00:00:00
|
|
1990-01-01 00:00:01 2000-01-01 00:00:01 2009-01-03 2009-01-04 00:00:00
|
|
1998-12-28 00:00:00 1998-12-28 00:00:00 1998-12-28 1998-12-28 00:00:00
|
|
1998-12-29 00:00:00 1998-12-29 00:00:00 1998-12-29 1998-12-29 00:00:00
|
|
1998-12-30 11:30:45 1998-12-30 11:30:45 1998-12-30 1998-12-30 11:30:45
|
|
1998-12-31 11:30:45 1998-12-31 11:30:45 1998-12-31 1998-12-31 11:30:45
|
|
1999-01-01 00:00:00 1999-01-01 00:00:00 NULL NULL
|
|
2007-05-23 09:15:28 2007-05-23 09:15:28 2007-05-24 2007-05-24 09:15:28
|
|
2007-05-27 00:00:00 2007-05-25 00:00:00 2007-05-26 2007-05-26 00:00:00
|
|
2008-01-01 00:00:00 NULL 2008-01-02 2008-01-03 00:00:00
|
|
2009-01-29 11:11:27 2009-01-29 11:11:27 2009-01-29 2009-01-29 11:11:27
|
|
2038-01-09 03:14:07 2038-01-09 03:14:07 2009-01-05 2009-01-06 00:00:00
|
|
SELECT * FROM t1 WHERE c2 IN ('1971-01-01 00:00:01','2038-01-09 03:14:07') ORDER BY c2;
|
|
c1 c2 c3 c4
|
|
2038-01-09 03:14:07 2038-01-09 03:14:07 2009-01-05 2009-01-06 00:00:00
|
|
SELECT * FROM t1 WHERE c2 IN ('1971-01-01 00:00:01','2038-01-09 03:14:07') ORDER BY c2 LIMIT 2;
|
|
c1 c2 c3 c4
|
|
2038-01-09 03:14:07 2038-01-09 03:14:07 2009-01-05 2009-01-06 00:00:00
|
|
SELECT * FROM t1 WHERE c2 IN ('1971-01-01 00:00:01','2038-01-09 03:14:07') ORDER BY c2 DESC;
|
|
c1 c2 c3 c4
|
|
2038-01-09 03:14:07 2038-01-09 03:14:07 2009-01-05 2009-01-06 00:00:00
|
|
SELECT * FROM t1 WHERE c2 IN ('1971-01-01 00:00:01','2038-01-09 03:14:07') ORDER BY c2 DESC LIMIT 2;
|
|
c1 c2 c3 c4
|
|
2038-01-09 03:14:07 2038-01-09 03:14:07 2009-01-05 2009-01-06 00:00:00
|
|
DROP TABLE t1;
|