gpt4 book ai didi

Mysql 组内随机项和组内计数项

转载 作者:行者123 更新时间:2023-11-30 23:17:57 25 4
gpt4 key购买 nike

enter image description here您好,以下所有查询都非常慢,我似乎无法对其进行优化。

我试过两种方法。两者都很慢。

我需要从每个 image_tag 中随机获取一个项目,以及属于某个标签的图像数量。任何建议将不胜感激。查询需要两分钟才能以任何一种方式执行。与图像计数和连接相关的速度较慢。图像本身计数非常快。加入的时候很慢。

SELECT T.id, T.title, T.guid_id, T.hits, al.title, tt.title, tt.raw, it.tag_title_id
,((ACOS(SIN(53.38946 * PI() / 180) * SIN(geo.latitude * PI() / 180) + COS(53.38946 * PI() / 180)
* COS(geo.latitude * PI() / 180) * COS((-2.599586 - geo.longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
AS distance, uf.real_name, uf.user_name, itx.image_count
FROM
(SELECT imx.id, imx.guid_id, imx.user_id, imx.approved, imx.hits, imx.title, imx.visible, imx.geolocation_id, imx.advertise_to
FROM image imx
ORDER BY floor(RAND()*(SELECT count(1) FROM image)))
AS T
INNER JOIN image_tag it ON T.id = it.image_id
INNER JOIN tag_title tt ON it.tag_title_id =tt.id
INNER JOIN album_image ai ON T.id = ai.image_id
INNER JOIN album al ON ai.album_id = al.id
INNER JOIN user us ON T.user_id = us.id
LEFT JOIN user_flickr uf ON us.flickr_id = uf.id
LEFT JOIN user_site uss ON us.user_site_id= uss.id
LEFT JOIN geolocation geo ON T.geolocation_id = geo.id
LEFT JOIN (SELECT image_id, count(*) as image_count FROM image_tag GROUP BY image_id) itx ON itx.image_id = T.id
WHERE T.visible = in_image_visible
AND T.approved = in_image_approved
AND (T.advertise_to <= in_date_time_now OR T.advertise_to IS NULL)
GROUP BY tt.id;

这很快

SELECT * FROM (SELECT image_id, count(*) as image_count 
FROM image_tag it
GROUP BY image_id) T
INNER JOIN image im ON T.image_id = im.id

当我在连接上添加随机逻辑时,速度非常慢

最佳答案

主要问题是您在超过 20,000 行的查询中有两个 filesorts

这意味着您在没有索引的情况下进行排序,对于这么多行,索引会很慢。

我建议您放弃随机排序...无论您使用何种语言处理 PHP 结果,都可以这样做。这将删除其中一个文件排序。如果这使事情达到合理的水平,那就太好了。

关于Mysql 组内随机项和组内计数项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16750703/

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