我有以下查询,我想在JOIN比较条件下执行区分大小写:
SELECT kousei.kousei_hin_id,shohin.shohin_id, hf.KOSCASSU, hf.MSTLINNO
FROM sc.HINMTF hf
LEFT OUTER JOIN m_kousei_hin kousei ON BINARY hf.HINCD = kousei.kousei_hin_code
LEFT OUTER JOIN m_shohin shohin ON BINARY hf.KOSHINCD = shohin.shohin_code ;
如果我不使用BINARY
,查询时间很短,但BINARY
非常慢
我尝试了另一种方式,例如collate
。但仍然没有好结果,查询时间仍然很长
请帮我解决这个问题
答案 0 :(得分:1)
嗯,即时转换需要很长时间,而且(我认为)不能使用任何索引。
您最好的选择是,您的表格设置为将排序规则设置为二进制排序,至少对于您要比较的列。
以下是一个如何运作的例子:
示例数据:
CREATE TABLE a
(`a` varchar(1) COLLATE utf8_bin)
;
INSERT INTO a
(`a`)
VALUES
('a'), ('B')
;
CREATE TABLE b
(`b` varchar(1) COLLATE utf8_bin)
;
INSERT INTO b
(`b`)
VALUES
('A'), ('B')
;
<强>查询:强>
select a, b from a join b on a.a = b.b;
<强>结果:强>
| a | b |
|---|---|
| B | B |