117 lines
4.0 KiB
Plaintext
117 lines
4.0 KiB
Plaintext
CREATE TABLE t1(a int, b VARCHAR(5), PRIMARY KEY(a));
|
|
INSERT INTO t1 VALUES (1, 'a'), (2, 'ab'), (3, 'abc'), (4, 'abcd'), (5, 'abcde');
|
|
ALTER TABLE t1 ADD KEY k2 (b(4));
|
|
ANALYZE TABLE t1;
|
|
|
|
--source include/func_prefix_key.inc
|
|
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1(a int, b VARCHAR(5), PRIMARY KEY(a)) DEFAULT CHARSET=latin1, COLLATE latin1_bin;
|
|
INSERT INTO t1 VALUES (1, 'a'), (2, 'ab'), (3, 'abc'), (4, 'abcd'), (5, 'abcde');
|
|
ALTER TABLE t1 ADD KEY k2 (b(4));
|
|
ANALYZE TABLE t1;
|
|
|
|
--source include/func_prefix_key.inc
|
|
|
|
DROP TABLE t1;
|
|
|
|
# Currently XEngine doesn't support utf32 collation
|
|
CREATE TABLE t1(a int, b VARCHAR(5), PRIMARY KEY(a)) DEFAULT CHARSET=utf8;
|
|
INSERT INTO t1 VALUES (1, 'a'), (2, 'ab'), (3, 'abc'), (4, 'abcd'), (5, 'abcde');
|
|
ALTER TABLE t1 ADD KEY k2 (b(4));
|
|
ANALYZE TABLE t1;
|
|
|
|
--source include/func_prefix_key.inc
|
|
|
|
DROP TABLE t1;
|
|
|
|
# Test for TEXT field.
|
|
|
|
CREATE TABLE t1(a int, b TEXT, PRIMARY KEY(a));
|
|
INSERT INTO t1 VALUES (1, 'a'), (2, 'ab'), (3, 'abc'), (4, 'abcd'), (5, 'abcde');
|
|
ALTER TABLE t1 ADD KEY k2 (b(4));
|
|
ANALYZE TABLE t1;
|
|
|
|
--source include/func_prefix_key.inc
|
|
|
|
DROP TABLE t1;
|
|
|
|
# More tests with the indexes with different prefix length.
|
|
|
|
CREATE TABLE t1(a int, b VARCHAR(5), PRIMARY KEY(a)) DEFAULT CHARSET=utf8;
|
|
INSERT INTO t1 VALUES (1, 'a'), (2, 'ab'), (3, 'abc'), (4, 'abcd'), (5, 'abcde'), (6, 'abcdf');
|
|
ALTER TABLE t1 ADD KEY k2 (b(4));
|
|
ALTER TABLE t1 ADD KEY k3 (b(2));
|
|
ALTER TABLE t1 ADD KEY k4 (a, b(3));
|
|
ANALYZE TABLE t1;
|
|
|
|
--echo # k2 index used since it's covering.
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE b like 'abc%';
|
|
SELECT COUNT(*) FROM t1 WHERE b like 'abc%';
|
|
|
|
--echo # k4 index used since it's covering.
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE a > 4 AND b like 'abc%';
|
|
SELECT COUNT(*) FROM t1 WHERE a > 4 AND b like 'abc%';
|
|
|
|
--echo # k3 index is used since it's shorters key.
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE b like 'ab%';
|
|
SELECT COUNT(*) FROM t1 WHERE b like 'ab%';
|
|
|
|
--echo # Index access is not used, no covering keys.
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE a > 4 AND b like 'abcde%';
|
|
SELECT COUNT(*) FROM t1 WHERE a > 4 AND b like 'abcde%';
|
|
|
|
--echo # k2 index used since it's covering.
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE a > 4 AND b like 'abcd%';
|
|
SELECT COUNT(*) FROM t1 WHERE a > 4 AND b like 'abcd%';
|
|
|
|
--echo # Index access is not used, no covering keys.
|
|
EXPLAIN SELECT b like 'abcdf%' FROM t1 WHERE a > 4 AND b like 'abcd%';
|
|
SELECT b like 'abcdf%' FROM t1 WHERE a > 4 AND b like 'abcd%';
|
|
|
|
--echo # Index access is used since k4 is covering.
|
|
EXPLAIN SELECT b like 'ab%' FROM t1 WHERE a > 4 AND b like 'a%';
|
|
SELECT b like 'ab%' FROM t1 WHERE a > 4 AND b like 'a%';
|
|
|
|
--echo # Index access is used since k3 is forced and covering.
|
|
EXPLAIN SELECT b like 'ab%' FROM t1 FORCE INDEX(k3) WHERE a > 4 AND b like 'a%';
|
|
SELECT b like 'ab%' FROM t1 FORCE INDEX(k3) WHERE a > 4 AND b like 'a%';
|
|
|
|
--echo # No index access is used since second argument is not const.
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE b like a;
|
|
SELECT COUNT(*) FROM t1 WHERE b like a;
|
|
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1(a int, b TEXT, c TEXT, PRIMARY KEY(a));
|
|
INSERT INTO t1 VALUES (1, 'a', 'a'), (2, 'ab', 'ab'), (3, 'abc', 'abc'), (4, 'abcd', 'abcd'), (5, 'abcde', 'abcde');
|
|
ALTER TABLE t1 ADD KEY k2 (b(4), c(3));
|
|
ANALYZE TABLE t1;
|
|
--echo # Index access is used since key is covering.
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE b like 'aaaa';
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Bug#27660560 RECENT REGRESSION: CRASH IN CHECK_COVERING_PREFIX_KEYS.
|
|
--echo #
|
|
|
|
CREATE TABLE t1(f1 BLOB, KEY(f1(1))) ;
|
|
INSERT INTO t1 VALUES ('ccc'), ('aa');
|
|
ANALYZE TABLE t1;
|
|
|
|
SELECT (f1 LIKE null) from t1;
|
|
--error ER_INVALID_JSON_TEXT_IN_PARAM
|
|
SELECT 1 FROM t1 WHERE f1 NOT LIKE json_merge('' ,'+' );
|
|
--error ER_INVALID_JSON_TEXT_IN_PARAM
|
|
SELECT 1 FROM t1 WHERE f1 LIKE json_contains('key2' ,'key4' );
|
|
SELECT 1 FROM t1 WHERE f1 LIKE json_depth(null);
|
|
|
|
# Tests below should use index access.
|
|
EXPLAIN SELECT (f1 LIKE null) from t1;
|
|
EXPLAIN SELECT (f1 LIKE null) from t1 WHERE f1 LIKE 'a%';
|
|
|
|
DROP TABLE t1;
|
|
|
|
--source suite/xengine/include/check_xengine_log_error.inc
|