例子:
表 1 有 100k 条记录,并且有一个带有唯一索引的 varchar 字段。表2有100万条记录,通过table1_id字段多对一关联到表1,有3个varchar字段,只有1个是唯一的。有问题的引擎是 InnoDB,所以没有全文索引。
为了论证的缘故,假设这些表将分别增长到最多 100 万和 1000 万条记录。
当我在表单中输入搜索词时,我希望它使用 LIKE 在所有四个(总计)可用 varchar 字段中搜索两个表,并仅返回 Table1 中的记录 - 所以我在这里按 table1.id 分组。我想知道的是,首先搜索百万记录表是否更有效,因为它只有一个需要搜索的字段并且该字段是唯一的,然后使用 table1.id IN ({IDS }) 查询,还是直接加入它们并立即搜索它们而不需要往返数据库会更好?
也就是说,在做join时,MySQL是按照搜索词加入,还是先加入后搜索?也就是说,如果我在一个查询中对两个表进行连接和 LIKE,它会首先连接它们,然后在它们中查找匹配的记录,还是只连接它发现匹配的记录?
编辑:我制作了两个样本表并伪造了一些数据。此示例查询是跨所有字段的连接和 LIKE 搜索。出于演示目的,我使用了 LIKE '%q%' 但实际上 q 可能是任何东西。MySQL 表示,对虚假 100k/1mil 记录的实际搜索耗时 0.03 秒。这是解释:http ://bit.ly/PsFBxK
这是在其一个唯一字段上仅搜索 table2 的解释查询:http: //bit.ly/S06Hug并且为了实际发生这个查询,MySQL 说它花了 0.0135 秒。