首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql组中的随机项和组中的计数项

Mysql组中的随机项和组中的计数项
EN

Stack Overflow用户
提问于 2013-05-25 22:49:41
回答 2查看 72关注 0票数 1

你好,所有下面的查询都很慢,我似乎不能优化它。

我已经尝试了两种方法。都很慢。

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

代码语言:javascript
复制
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;

这很快

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

发布于 2013-05-25 23:08:35

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-05-26 06:50:46

您可以尝试使用此方法来获取随机图像:

代码语言:javascript
复制
  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 rand()

附加子查询不可能对问题有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16750703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档