LEFT JOIN 或 REGULAR JOIN,以及如何将 MySql 表与数组进行比较?需要表现!

Posted

技术标签:

【中文标题】LEFT JOIN 或 REGULAR JOIN,以及如何将 MySql 表与数组进行比较?需要表现!【英文标题】:LEFT JOIN or REGULAR JOIN, and how to compare MySql table to an array? Need performance! 【发布时间】:2010-02-25 14:30:13 【问题描述】:

我有六张桌子:t1、t2、t3、t4、t5、t6。而且我还有一张主表:main_table。总共 7 张桌子!

现在,我正在使用 SOLR 搜索分类广告,并将来自 solr 的结果放入一个数组中。数组结果是 ID:nrs,我用它来匹配 mysql 中的相同 ID:s。

MySql中所有表的第一列称为classified_id。

如果用户搜索“cars”,那么 Solr 会查找所有的汽车分类,将 id:s 放入一个数组中,最后比较 MySql 主表以匹配表 t1(即汽车表)中的分类 ID在两个表中是相同的。

SOLR 结果数组首先被内爆,然后:

SELECT * FROM classified, t1 WHERE classified.ad_id IN ('$solr_id_arr_imploded') AND classified.classified_id=t1.classified_id

我的问题是,我应该这样做吗?这是我应该在这里加入,还是使用左加入?有没有比数组更快的方法?

如果没有汽车分类,表格t1 可能为空...

请记住,查询可能会变得非常非常长,例如,如果 SOLR 返回 10000 个匹配项,则将返回一个由 10000 个 ID 组成的数组,如下所示:bmw_m3_low_miles_8948939

谢谢

【问题讨论】:

搜索结果会分页吗?也就是说,如果 SOLR 搜索返回这 10,000 个匹配项,您需要一次全部获取它们,还是一次只(例如)50 个? 嗨。结果用 MySql LIMIT 分页。不是索尔。但是,如果您知道如何在 Solr 中执行此操作,那么也许这就是该怎么做? 【参考方案1】:

IN 的替代方法是创建一个临时表,用 ID 填充它,然后对其执行内部连接。确保其他表在classified_id 上有索引。要比较选项,请use EXPLAIN

【讨论】:

以上是关于LEFT JOIN 或 REGULAR JOIN,以及如何将 MySql 表与数组进行比较?需要表现!的主要内容,如果未能解决你的问题,请参考以下文章

关于mysql中的left join和left outer join的区别

sql inner join 与 left join和right join 执行效率上面有多大差别?

(', CROSS, FULL, INNER, JOIN, LEFT, NATURAL, ON, RIGHT 或 USING 预期,得到'WITH'

oracle SQL left join()或full out join()根据键排除记录

sql join,left join,rigt join

Mysql 连接(left join, right join, inner join ,full join)