连接两个表即使使用索引,MySQL也很慢

by0*_*by0 3 mysql sql database join

我有两张桌子:

第一个table1是动态创建的(当用户从​​Web服务器提交数据时),通常是~50K行.第二个表是一个查找表table2,有~10Mil行.

我正在尝试将两个表连接到四列,如下所示:

SELECT t.id FROM table1 t 
JOIN table2 m
ON (t.name = m.name AND t.pos = m.pos AND t.ref = m.ref AND t.alt = m.alt);

我已将列name(VARCHAR),pos(INT),ref(CHAR)和alt(CHAR)编入索引table2,但查询仍然需要很长时间才能完成.

关于这里可能出现什么问题的任何指示?

谢谢


产量EXPLAIN:

id  select_type table   partitions  type    possible_keys   key key_len ref rows    filtered    Extra
1   SIMPLE  t1  NULL    ALL NULL    NULL    NULL    NULL    49329   100.00  Using where
1   SIMPLE  t2  NULL    ref table2_name,table2_pos,table2_ref,table2_alt    table2_name 32  my_db.t1.NAME   2488    0.00    Using index condition; Using where

das*_*ick 7

创建复合索引 name, pos, ref, alt

喜欢

INDEX theIndex (name,pos,ref, alt)
Run Code Online (Sandbox Code Playgroud)

此外,4个单一索引将有所帮助 - 请参阅http://dev.mysql.com/doc/refman/5.7/en/index-merge-optimization.html - 但不如复合索引那么多.