gpt4 book ai didi

mysql - sql查询速度的问题

转载 作者:行者123 更新时间:2023-11-29 02:34:46 25 4
gpt4 key购买 nike

我正在为执行速度非常慢的 MySQL 查询而苦苦挣扎。我希望你们中的一些人能够给我一些关于如何提高这个查询速度的建议。

这是表结构:

+---------------+------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| MedlemsID | int(11) | NO | MUL | NULL | |
| Medlemsnummer | int(11) | NO | | NULL | |
| Handling | tinyint(1) | NO | | NULL | |
| KlubID | int(11) | NO | | NULL | |
| Klubtype | varchar(5) | NO | | NULL | |
| Tidspunkt | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| Køn | int(1) | NO | | NULL | |
+---------------+------------+------+-----+-------------------+----------------+
8 rows in set (0.00 sec)

这是查询:

        SELECT * FROM ( 
SELECT *
FROM Handlinger
AS a
WHERE date(Tidspunkt) = curdate()
AND Tidspunkt = (
SELECT max(Tidspunkt)
FROM Handlinger
AS b
WHERE a.MedlemsID = b.MedlemsID
AND a.Klubtype = b.Klubtype
)
)
AS c
WHERE Handling=1
AND KlubID=1
ORDER BY Medlemsnummer ASC

这是结果:

+-------+-----------+---------------+----------+--------+----------+---------------------+-------+
| id | MedlemsID | Medlemsnummer | Handling | KlubID | Klubtype | Tidspunkt | Køn |
+-------+-----------+---------------+----------+--------+----------+---------------------+-------+
| 24743 | 613 | 10 | 1 | 1 | UK | 2011-08-10 12:14:10 | Pige |
| 24733 | 572 | 11 | 1 | 1 | UK | 2011-08-10 10:45:00 | Pige |
| 24731 | 705 | 13 | 1 | 1 | FK | 2011-08-10 10:31:35 | Dreng |
| 24740 | 409 | 51 | 1 | 1 | FK | 2011-08-10 11:48:19 | Dreng |
| 24757 | 443 | 88 | 1 | 1 | FK | 2011-08-10 15:01:43 | Dreng |
| 24730 | 723 | 89 | 1 | 1 | FK | 2011-08-10 10:30:13 | Dreng |
| 24749 | 465 | 110 | 1 | 1 | FK | 2011-08-10 13:29:40 | Dreng |
| 24720 | 483 | 129 | 1 | 1 | FK | 2011-08-10 10:03:43 | Dreng |
| 24725 | 748 | 181 | 1 | 1 | FK | 2011-08-10 10:12:11 | Dreng |
| 24748 | 540 | 207 | 1 | 1 | FK | 2011-08-10 13:26:54 | Dreng |
+-------+-----------+---------------+----------+--------+----------+---------------------+-------+
10 rows in set (2.95 sec)

非常感谢您的帮助。

编辑一些描述:

该应用程序本身就像俱乐部成员(member)的签到系统。每次成员(member)登录或注销时,都会在数据库中注册。为了使该应用程序有用,它必须显示一天中任何给定时间谁在线。所以我的查询是获取当天的所有登录,如果最近的事件是登录,那么它将输出到应用程序。所有这一切都非常有效,但如果他们必须等待几秒钟才能看到谁在线谁不在线,这对用户来说就不是那么友好了。

希望这能让我的目标更清晰一些。 :)

最佳答案

您的查询过载了 WAYYYY...因为您需要一个特定的日期,所以我会在

日期(TidSpunkt),处理,KlubID,MedlemsID

然后,尝试以下操作...由于表使用自动递增,最大数字意味着最近的日期...因此,我们可以获得每个 MedlemsID 的最大 ID,以便仅允许更快地加入那些合格

Select STRAIGHT_JOIN
H1.*
from
( select
H2.MedlemsID,
max( H2.ID ) LastID
from
Handlinger H2
where
date( H2.Tidspunkt ) = curdate()
AND H2.Handling = 1
AND H2.KlubID = 1
group by
H2.MedlemsID ) PreQuery
JOIN Handlinger H1
On PreQuery.LastID = H1.ID
order by
H1.Medlemsnummer ASC

关于mysql - sql查询速度的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7016125/

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