gpt4 book ai didi

mysql - 如何提高这个sql查询的性能?

转载 作者:行者123 更新时间:2023-11-29 03:22:04 25 4
gpt4 key购买 nike

(我在 php 和 MySQL 上工作)

情况如下:通过 ajax 请求,我每 10 秒检查一次用户所属的日历中是否有新内容。

对于每个 calendars(w/e 它是一个日历或其他元素,但在这种情况下,它是一个日历),有几件事要检查,所以我做了一个“大”查询以返回每个日历 的所有数据,我用 php 处理它,然后用 js(弹出通知或 w/e)处理它。

要检查三件事:

  • 自从他上次访问日历以来是否有“日期”修改?
  • 自从他上次看到以来,聊天日历中是否有新的谈话?
  • 是否有没有得到答复的加入日历的请求?

我是这样做的:

SELECT DISTINCT
ci.ci_cid as c_id,
MAX(cc.cc_timestamp) as chat_lastmsg, umchat.um_value as chat_lastview,
MAX(cr.cr_id) as request_id,
cmodif.cm_value as modification_timestamp,
umodif.um_value as modification_view
FROM c_individuals as ci
LEFT JOIN c_chats as cc ON cc.cc_cid = ci.ci_cid
LEFT JOIN u_metas as umchat ON (umchat.um_uid = ci.ci_ciuid AND umchat.um_cid = ci.ci_cid AND umchat.um_name = "chat_last_view")
LEFT JOIN c_requests as cr ON (cr.cr_cid = ci.ci_cid AND cr.cr_answer = "0")
LEFT JOIN c_metas as cmodif ON (cmodif.cm_cid = ci.ci_cid AND cmodif.cm_name = "last_modifications")
LEFT JOIN u_metas as umodif ON (umodif.um_uid = ci.ci_uid AND umodif.um_cid = ci.ci_cid AND umodif.um_name = "last_view")
WHERE ci.ci_uid = :u_id
GROUP BY ci.ci_cid
  • c_individuals 表包含日历中的用户。
  • u_metas 表包含用户的元数据,其中包含 um_uid(用户 ID)、um_cid(与元数据相关的日历 ID)、um_name(元的名称),um_value(元的值)
  • c_requests 表有请求的信息(u_id, c_id, answer and stuff)

我的查询给了我我想要的,意思是这样的:

0 => 
array (size=6)
'c_id' => string '50' (length=2)
'chat_lastmsg' => null
'chat_lastview' => null
'request_id' => null
'modification_timestamp' => string '1488878397.703508' (length=17)
'modification_view' => string '1488877914.048585' (length=17)
1 =>
array (size=6)
'c_id' => string '51' (length=2)
'chat_lastmsg' => string '1485326492' (length=10)
'chat_lastview' => string '1488470529' (length=10)
'request_id' => null
'modification_timestamp' => string '1488878397.703508' (length=17)
'modification_vue' => string '1488878065.811320' (length=17)

但老实说,我觉得它有点慢。不做处理,仅仅为了得到查询结果,重复1000次需要3.5秒左右。

这没什么大不了的,但是对于潜在的大量用户来说,这个查询被重复了很多次。

所以我的问题是:有什么方法可以改进它,还是我擅长这个?

感谢您的宝贵时间,抱歉我的英语不好。

最佳答案

除了您不需要 DISTINCT 因为您正在执行 GROUP BY 之外,没有发现您发布的查询有任何问题。此外,请确保在 JOIN ON 条件和 WHERE 条件中使用的列上有正确的索引。

关于mysql - 如何提高这个sql查询的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42644870/

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