首先,当连接小表和大表的时候,大家需要将小表放在左边,大表放在右边。
SELECT * FROM small_table LEFT JOIN big_table ON small_table.id=big_table.sm_id;
这是因为MySQL在执行连接的时候需要依赖右表,当右表非常大的时候,连接将会非常慢。但是当大家将小表放在左边时,MySQL可以先查找小表中匹配的数据,然后再到大表中查找相应的数据,这样可以大大加快查询速度。
而当大家需要查询的数据非常庞大的时候,大家还需要加上索引,可以进一步提高查询效率。
ALTER TABLE big_table ADD INDEX (sm_id);
这时候大家可以使用LEFT JOIN直接查询数据。
SELECT * FROM small_table LEFT JOIN big_table ON small_table.id=big_table.sm_id;
最后,大家还需要注意内存使用的问题。当大家进行连接操作时,MySQL会将两张表全部读进内存中进行数据操作,如果一张表非常大,可能会导致内存溢出。因此大家应该使用limit来限制每次读取的数据量。
SELECT * FROM small_table LEFT JOIN big_table ON small_table.id=big_table.sm_id LIMIT 100000;