gpt4 book ai didi

mysql - 交叉连接的性能

转载 作者:行者123 更新时间:2023-11-29 02:06:16 24 4
gpt4 key购买 nike

我正在构建一个照片内容网页。为了使所有的内容组合起来,我使用了cross join。假设我有以下简单表格:

table 照片

id filename
------------
1 a.jpg
2 b.jpg
3 c.jpg
4 d.jpg
5 e.jpg

我可以从表格中得出的组合数是 10,这些是

1,2
1,3
1,4
1,5
2,3
2,4
2,5
3,4
3,5
4,5

我通过使用以下交叉连接查询得到上述结果

    SELECT cp1.id,
cp2.id
from photos as cp1
cross join photos as cp2
where cp1.id < cp2.id

...我使用以下查询来显示用户没有看到的挑战。

    SELECT cp1.id,
cp1.filename,
cp2.id,
cp2.filename
from challenge_photos as cp1
cross join challenge_photos as cp2
where cp1.id < cp2.id
and (cp1.id,cp2.id) not in ( (x1,x2), (x1,x2) )
and cp1.id = something
and cp2.img_id != something

到目前为止,这些查询运行良好。来自 phpmyadmin 的每个查询大约需要 0.0002 秒(来自 2300 行)。

假设我的表中有 2000 行。可能的组合数量是巨大的。当我的网站上有很多活跃用户时,我会遇到问题吗?

最佳答案

我建议创建一个不同大小的测试数据库并测试查询以查看其性能。在 29k 行的表上执行类似的查询时,我在 70k 行的表中得到了 10-30ms 的查询和类似的数字,这似乎表明查询并不完全糟糕。查询似乎也被缓存,这意味着如果您的表看到很少的写入和许多相同的查询,您将看到显着的好处。

在您的示例查询中还有一个明显的不对称性:如果 cp1.id 很小,您将获得 100s/1000s 的行,而如果它很大,您只会得到几行。

This SO question指的是带有 WHERE 子句的交叉连接查询,其作用类似于内部连接。

关于mysql - 交叉连接的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com