表连接速度太慢了!

时间:2010-07-15 11:10:50

标签: mysql join

我加入了两个表,表a中有数百条记录,表b中有数十万条记录。我加入了内部和左边的连接,但它是两个慢。我的查询是:

SELECT 
    ch.id,
    ch.client_client_id,
    ch.duration,
    ch.start,
    ch.isread,
    ch.prefix,
    ucr.ucr_add_factor,
    ucr.ucr_period,
    ucr.ucr_cr_prefix 
FROM 
    call_history AS ch 
    LEFT JOIN tbl_usr_call_rates AS ucr 
        ON (
            ch.prefix=ucr.ucr_cr_prefix 
            AND ch.client_client_id=ucr.ucr_callshop_id
        ) 
WHERE 
    ch.isread='0' 

如何提高性能

感谢您提前......

5 个答案:

答案 0 :(得分:2)

检查使用的索引。您可以看到通过

使用的内容
EXPLAIN SELECT 
ch.id, ch.client_client_id, ch.duration, ch.start, ch.isread, ch.prefix, 
ucr.ucr_add_factor, ucr.ucr_period, ucr.ucr_cr_prefix
FROM call_history AS ch 
LEFT JOIN tbl_usr_call_rates AS ucr
ON (ch.prefix=ucr.ucr_cr_prefix AND ch.client_client_id=ucr.ucr_callshop_id)
WHERE ch.isread='0' 

答案 1 :(得分:1)

通常的嫌疑人:

检查索引 检查连接是否需要多个字段,否则您将拥有笛卡尔积

还有很多其他的,但这些是主要的。

吉姆

答案 2 :(得分:0)

我认为你在这些领域有索引吗?

call_history.prefix
tbl_usr_call_rates.ucr_cr_prefix
call_history.client_client_id
tbl_usr_call_rates.ucr_callshop_id
call_history.isread

答案 3 :(得分:0)

您可以尝试在加入的列上添加索引。

答案 4 :(得分:0)

在加入之前首先通过WHERE子句进行过滤,这样就可以加入已经过滤的结果,而不是加入所有结果,然后过滤大结果。