【问题标题】:LEFT JOIN or REGULAR JOIN, and how to compare MySql table to an array? Need performance!LEFT JOIN 或 REGULAR JOIN,以及如何将 MySql 表与数组进行比较?需要表现!
【发布时间】: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 中执行此操作,那么也许这就是该怎么做?

标签: php sql mysql html database


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2016-12-16
    • 2012-04-03
    • 2013-04-19
    • 2023-01-02
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多