gpt4 book ai didi

sql - 如何优化此 SQL 选择查询?

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

我能够完成此查询,但需要 25 秒。那太长了!如何优化此查询?

SELECT COUNT(DISTINCT u1.User_ID ) AS total
FROM UserClicks u1
INNER JOIN (SELECT DISTINCT User_ID
FROM UserClicks
WHERE (Date BETWEEN DATE_SUB(:startDate, INTERVAL 1 MONTH) AND :startDate)) u2
ON u1.User_ID = u2.User_ID
WHERE (u1.Date BETWEEN :startDate AND :endDate)

这是在 MySQL 数据库上使用

最佳答案

SELECT  COUNT(*) AS total
FROM (
SELECT DISTINCT User_ID
FROM UserClicks
WHERE Date BETWEEN DATE_SUB(:startDate, INTERVAL 1 MONTH) AND :startDate
) u1
WHERE EXISTS
(
SELECT NULL
FROM UserClicks u2
WHERE u2.User_ID = u1.User_ID
AND u2.Date BETWEEN :startDate AND :endDate
)

(User_ID, Date) 上创建复合索引:

CREATE INDEX ix_userclicks_user_date ON UserClicks (User_ID, Date)

如果您的用户很少但点击次数很多,并且有一个表 Users,您可以使用 Users 表而不是 DISTINCT:

SELECT  COUNT(*)
FROM Users u
WHERE EXISTS
(
SELECT NULL
FROM UserClicks uc1
WHERE uc1.UserId = u.Id
AND uc1.Date BETWEEN DATE_SUB(:startDate, INTERVAL 1 MONTH) AND :startDate
)
AND EXISTS
(
SELECT NULL
FROM UserClicks uc2
WHERE uc2.UserId = u.Id
AND u2.Date BETWEEN :startDate AND :endDate
)

关于sql - 如何优化此 SQL 选择查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059240/

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