mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Indexes can be used for optimization if the operation
collation is the same with the index collation.
This commit is contained in:
@ -541,3 +541,50 @@ s2 CHAR(5) COLLATE latin1_swedish_ci);
|
||||
SELECT * FROM t1 WHERE s1 = s2;
|
||||
ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
|
||||
DROP TABLE t1;
|
||||
SET NAMES latin1;
|
||||
CREATE TABLE t1
|
||||
(s1 char(10) COLLATE latin1_german1_ci,
|
||||
s2 char(10) COLLATE latin1_swedish_ci,
|
||||
KEY(s1),
|
||||
KEY(s2));
|
||||
INSERT INTO t1 VALUES ('a','a');
|
||||
INSERT INTO t1 VALUES ('b','b');
|
||||
INSERT INTO t1 VALUES ('c','c');
|
||||
INSERT INTO t1 VALUES ('d','d');
|
||||
INSERT INTO t1 VALUES ('e','e');
|
||||
INSERT INTO t1 VALUES ('f','f');
|
||||
INSERT INTO t1 VALUES ('g','g');
|
||||
INSERT INTO t1 VALUES ('h','h');
|
||||
INSERT INTO t1 VALUES ('i','i');
|
||||
INSERT INTO t1 VALUES ('j','j');
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1='a';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref s1 s1 11 const 1 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2='a';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref s2 s2 11 const 1 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1='a' COLLATE latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref s1 s1 11 const 1 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2='a' COLLATE latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL s2 NULL NULL NULL 10 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1 BETWEEN 'a' AND 'b' COLLATE latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range s1 s1 11 NULL 2 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2 BETWEEN 'a' AND 'b' COLLATE latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL s2 NULL NULL NULL 10 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1 IN ('a','b' COLLATE latin1_german1_ci);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range s1 s1 11 NULL 2 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2 IN ('a','b' COLLATE latin1_german1_ci);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL s2 NULL NULL NULL 10 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1 LIKE 'a' COLLATE latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range s1 s1 11 NULL 1 Using where
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2 LIKE 'a' COLLATE latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL s2 NULL NULL NULL 10 Using where
|
||||
DROP TABLE t1;
|
||||
|
@ -156,3 +156,41 @@ CREATE TABLE t1
|
||||
--error 1266
|
||||
SELECT * FROM t1 WHERE s1 = s2;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# Test that optimizer doesn't use indexes with wrong collation
|
||||
#
|
||||
SET NAMES latin1;
|
||||
CREATE TABLE t1
|
||||
(s1 char(10) COLLATE latin1_german1_ci,
|
||||
s2 char(10) COLLATE latin1_swedish_ci,
|
||||
KEY(s1),
|
||||
KEY(s2));
|
||||
|
||||
INSERT INTO t1 VALUES ('a','a');
|
||||
INSERT INTO t1 VALUES ('b','b');
|
||||
INSERT INTO t1 VALUES ('c','c');
|
||||
INSERT INTO t1 VALUES ('d','d');
|
||||
INSERT INTO t1 VALUES ('e','e');
|
||||
INSERT INTO t1 VALUES ('f','f');
|
||||
INSERT INTO t1 VALUES ('g','g');
|
||||
INSERT INTO t1 VALUES ('h','h');
|
||||
INSERT INTO t1 VALUES ('i','i');
|
||||
INSERT INTO t1 VALUES ('j','j');
|
||||
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1='a';
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2='a';
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1='a' COLLATE latin1_german1_ci;
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2='a' COLLATE latin1_german1_ci;
|
||||
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1 BETWEEN 'a' AND 'b' COLLATE latin1_german1_ci;
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2 BETWEEN 'a' AND 'b' COLLATE latin1_german1_ci;
|
||||
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1 IN ('a','b' COLLATE latin1_german1_ci);
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2 IN ('a','b' COLLATE latin1_german1_ci);
|
||||
|
||||
EXPLAIN SELECT * FROM t1 WHERE s1 LIKE 'a' COLLATE latin1_german1_ci;
|
||||
EXPLAIN SELECT * FROM t1 WHERE s2 LIKE 'a' COLLATE latin1_german1_ci;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
Reference in New Issue
Block a user