我有两张桌子,都有大约200,000条记录。我想在KEY上加入它们,这是一个字符串。
两个表都有索引KEY,VALUE。我跑的时候:
SELECT vpn, t1_sku, t2_sku
FROM first_inventory
LEFT JOIN second_inventory USING (vpn)
真的很快。这是解释输出:
----------------------------------------------------------------------------------------------------------------------------
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|----|-------------|------------------|----------|-----------------|---------|-----------|---------|--------|--------------|
| 1 | SIMPLE | first_inventory | index | | t1_vpn | 158 | | 204437 | Using index |
| 1 | SIMPLE | second_inventory | ref | t2_vpn | t2_vpn | 387 | func | 1 | Using index |
----------------------------------------------------------------------------------------------------------------------------
然而,当我做一个正确的JOIN时,它需要永远而且永远不会结束:“SELECT vpn,t1_sku,t2_sku FROM first_inventory RIGHT JOIN second_inventory USING(vpn)”。这是解释输出:
----------------------------------------------------------------------------------------------------------------------------
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|----|-------------|------------------|----------|-----------------|---------|-----------|---------|--------|--------------|
| 1 | SIMPLE | second_inventory | index | | t1_vpn | 773 | | 220996 | Using index |
| 1 | SIMPLE | first_inventory | index | | t2_vpn | 158 | | 204437 | Using index |
----------------------------------------------------------------------------------------------------------------------------
我可以看到RIGHT JOIN
查询似乎在查看220996 x 204437行,而LEFT JOIN
似乎只看204437行,但我无法弄清楚为什么我两个表上都有相同的索引。
在两个表的末尾都说:
PRIMARY KEY ('id'),
KEY 't1_vpn' ('vpn','t1_sku') USING BTREE
and
PRIMARY KEY ('id'),
KEY 't2_vpn' ('vpn','t2_sku') USING BTREE
知道为什么RIGHT JOIN查询花了这么长时间?