gpt4 book ai didi

php - 优化复杂的 mysql 查询

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

以下查询在 phpmyadmin 上花费了 0.1313 秒。有什么方法可以优化它以使事情变得更快(比如想在 0.00XX 秒内得到它)?索引已添加到正在进行连接的列中。

SELECT m.id, m.civ, m.prenom, m.nom, m.sexe, m.depart, m.date_entree, m.date_sortie, m.login_userid, m.login_passwd, a.rank_id, r.rank_m, r.rank_f, d.user_id AS depID, c.nom AS cordo, z.rank
FROM `0_member` AS m
LEFT JOIN `0_area` AS a ON ( m.id = a.user_id
AND a.sec_id =2 )
LEFT JOIN `0_rank` AS r ON r.id = a.rank_id
LEFT JOIN `0_depart` AS d ON ( m.depart = d.depart
AND d.user_sec =2 )
LEFT JOIN `0_area` AS z ON ( d.user_id = z.user_id
AND z.sec_id =2 )
LEFT JOIN `0_member` AS c ON d.user_id = c.id
WHERE z.rank = 'mod'
ORDER BY nom

最佳答案

您的查询在“Z”别名表中找到的值为“mod”的最终“WHERE”子句中有一个最终的“WHERE”子句,但您的查询是所有 LEFT JOIN 表明您想要所有成员,而不管可能的匹配项您要加入的右侧 table 。

此外,您通过离开并离开用户 ID 将下游连接到“z”表,然后直接重新连接到“0_area”作为直接在用户 ID 上的 A 表,这与 APPEARS 相同无论如何从离开表到“z”表的链接中找到。

就是说,您的成员加入出发然后前往区域...

我的建议(我可以这样重写查询)是颠倒查询的顺序,将您的 Area 表放在首位,并在“sec_id,rank”上提供可用的索引...我将根据键顺序在哪个类别上首先具有较小的子集列...因此 SEC_ID、RANK 或 RANK、SEC_ID。然后对其他表进行简单的 JOIN(不是 LEFT JOIN)...至少从:

SELECT STRAIGHT_JOIN
m.id,
m.civ,
m.prenom,
m.nom,
m.sexe,
m.depart,
m.date_entree,
m.date_sortie,
m.login_userid,
m.login_passwd,
a.rank_id,
r.rank_m,
r.rank_f,
d.user_id AS depID,
c.nom AS cordo,
z.rank
FROM
`0_area` AS z
JOIN `0_depart` AS d
on z.user_id = d.user_id
and d.user_sec = 2
JOIN `0_member` AS m
on d.depart = m.depart
AND z.user_id = m.id
LEFT JOIN `0_rank` AS r
on z.rank_id = .rid
WHERE
z.sec_id = 2
AND z.rank = 'mod'
ORDER BY
nom

在您的原始查询中,您有一个连接来自

member
Links to Area (on member's user ID just to ensure the "sec_id = 2")

由于新查询完全以“area”表作为“Z”别名开始,并且 where 子句明确为“sec_id = 2”值,因此您永远不需要再次反向链接...

Area (only SECID = 2 and rank = mod)
Links to Depart (on the User's ID)
Links to Members by (on the depart ID)

关于php - 优化复杂的 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071263/

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