0


假设我有这张桌子:

img_id, img_author, img_path
1     | BillyDoe  | img1.jpg
2     | BillyDoe  | img2.jpg
3     | BillyDoe  | img3.jpg

我运行另一个与某些特定条件匹配的查询,该查询返回一个数组,其中包含许多 img_author 名称,例如:BillyDoe、JillDoe、JohnDoe 等...

我要做的第二件事是从图像表中获取与作者姓名匹配的所有图像

最好用上一个查询返回的所有作者姓名创建一个循环并像这样多次运行查询

select img_path from images_table where img_author = $curr_author_name

或者我应该创建一个自定义函数,它将连接所有作者姓名并使用多个“或”运算符运行单个 sql 查询,如下所示:

select img_path from images_table where img_author = BillyDoe or img_author =  JillDoe or img_author =  JohnDoe ... x100 times

通过这两种方式中的任何一种,我会有任何形式的性能损失/增益吗?或者有更好的选择,比如多查询等。总是在谈论性能方面,哪种方法会减少资源密集度?

谢谢你。

4

1 回答 1

2

我会使用连接进行单个查询,这样您就可以查询您要查找的 img_author 名称,然后针对该表连接以获取 img_path 信息。

您还没有显示您提到的第一个查询以确定作者姓名,所以我不能给您一个具体的例子。但是该查询可能如下所示:

SELECT
    it.img_path AS img_path
FROM
    whatever_table_is_in_your_first_query AS x
INNER JOIN
    img_table AS it
ON x.author = it.img_author
WHERE
   ... /* whatever criteria you use to get author names */

在嵌套循环中进行查询绝对应该被视为要避免的反模式,除非您有非常具体的理由这样做并了解性能权衡。

于 2015-10-26T20:47:58.800 回答