我以多种不同的方式编写查询,mysql性能页面表明,您只需使用基准测试,因为有时子查询速度更快,而其他时候连接速度更快。然而,我发现最好的解决方案是,正如我最初所想的那样,将数据写入cookie或会话并更新一次一个小时。这样用户就不会同时加载所有数据,也不
我以多种不同的方式编写查询,mysql性能页面表明,您只需使用基准测试,因为有时子查询速度更快,而其他时候连接速度更快。然而,我发现最好的解决方案是,正如我最初所想的那样,将数据写入cookie或会话并更新一次一个小时。这样用户就不会同时加载所有数据,也不会在每个页面上加载数据。仅当cookie/会话信息已过期时。我以多种不同的方式编写查询,mysql性能页面表明,您只需使用基准测试,因为有时子查询速度更快,而其他时候连接速度更快。然而,我发现最好的解决方案是,正如我最初所想的那样,将数据写入cookie或会话并更新一次一个小时。这样用户就不会同时加载所有数据,也不,mysql,Mysql,我以多种不同的方式编写查询,mysql性能页面表明,您只需使用基准测试,因为有时子查询速度更快,而其他时候连接速度更快。然而,我发现最好的解决方案是,正如我最初所想的那样,将数据写入cookie或会话并更新一次一个小时。这样用户就不会同时加载所有数据,也不会在每个页面上加载数据。仅当cookie/会话信息已过期时。 $stmt=$db->prepare("SELECT COUNT(*) AS cnt FROM stream_updates
$stmt=$db->prepare("SELECT COUNT(*) AS cnt
FROM stream_updates
INNER JOIN members
ON members.username=stream_updates.username
WHERE (stream_updates.time between (NOW() - INTERVAL 1 DAY) AND NOW())
AND (members.username = :user) OR members.username IN (
SELECT friend2 as username FROM list_friends
WHERE (friend1 = :user AND friend2 <> :user)
UNION
SELECT friend1 as username FROM list_friends
WHERE (friend2 = :user AND friend1 <> :user)
)");
$stmt->bindParam(':user', $username);
$stmt->execute();
$textcnt1 = $stmt->fetchColumn();
$stmt=$db->prepare("SELECT COUNT(*) AS cnt
FROM stream_updates
INNER JOIN members
ON members.username=stream_updates.username
WHERE (stream_updates.time between (NOW() - INTERVAL 2 DAY) AND (NOW() - INTERVAL 1 DAY))
AND (members.username = :user) OR members.username IN (
SELECT friend2 as username FROM list_friends
WHERE (friend1 = :user AND friend2 <> :user)
UNION
SELECT friend1 as username FROM list_friends
WHERE (friend2 = :user AND friend1 <> :user)
)");
$stmt->bindParam(':user', $username);
$stmt->execute();
$textcnt2 = $stmt->fetchColumn();
(NOW() - INTERVAL 1 DAY) AND NOW())
(NOW() - INTERVAL 2 DAY) AND (NOW() - INTERVAL 1 DAY))
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-------------------------------------------------------------------------------------------------------------------------------------
1 | PRIMARY | favorites | ALL | NULL | NULL | NULL | NULL | 9 |
1 | PRIMARY | members | eq_ref | username | username | 257 | favorites.username | 1 | Using where; Using index
2 | DEPENDENT SUBQUERY | list_friends | ALL | NULL | NULL | NULL | NULL | 3 | Using where
3 | DEPENDENT UNION | list_friends | ALL | NULL | NULL | NULL | NULL | 3 | Using where
NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL |
SELECT datediff(NOW(), `stream_updates`.`time`) AS days, COUNT(*) AS cnt
FROM stream_updates
INNER JOIN members ON members.username = stream_updates.username
WHERE datediff(NOW(), `stream_updates`.`time`) < 3
AND (
members.username = :user
OR
members.username IN (
SELECT DISTINCT if(friend2 = :user, friend1, friend2)
FROM list_friends
WHERE friend1 = :user
OR friend2 = :user
)
)
GROUP BY 1
SELECT datediff(NOW(), `stream_updates`.`time`) AS days, COUNT(*) AS cnt
FROM stream_updates
INNER JOIN members ON members.username = stream_updates.username
WHERE datediff(NOW(), `stream_updates`.`time`) < 3
AND (
members.username = :user
OR EXISTS (
SELECT 1 FROM list_friends WHERE
(members.username = friend1 AND friend2 = :user)
OR
(members.username = friend2 AND friend1 = :user)
)
)
GROUP BY 1
ALTER TABLE list_friends ADD INDEX f1f2(friend1,friend2)