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'