为什么在JOIN上执行区分大小写的比较使查询变得如此缓慢

时间:2015-11-04 08:58:08

标签: mysql

我有以下查询,我想在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。但仍然没有好结果,查询时间仍然很长

请帮我解决这个问题

1 个答案:

答案 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 |