【发布时间】:2018-05-13 21:31:36
【问题描述】:
我有这个选择:
select 'like' prefix
, l.post
, l.data as data
, l.user
, concat(k.user, ' liked you') as logs
from likes l
inner join posts p on l.post = p.id
inner join cadastro k on l.user = k.id
where p.user = 1 and l.user <> p.user
order by data desc
limit 10
耗时 2.3993 秒。
`likes` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`user` int(11) UNSIGNED NOT NULL,
`post` int(11) UNSIGNED NOT NULL,
`data` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_post` (`user`,`post`),
KEY `post_user` (post, user),
FOREIGN KEY (`user`) REFERENCES cadastro (`id`),
FOREIGN KEY (`post`) REFERENCES posts (`id`) ON DELETE CASCADE
)
`posts` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`cadastro` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
有什么想法可以加快速度吗?我也尝试在喜欢数据上添加索引,但没有发现差异。
【问题讨论】:
-
我觉得我们已经这样做了?!?
-
@Strawberry 是的!但是查询是在一个联合上的,我注意到这个类似的部分是有问题的部分,所以我决定在这篇文章中更好地解释。我也试过你的提示,改变
<>部分,但结果是一样的。 -
但是我们已经到了
where p.user = 1 and l.user <> 1。那是怎么回事? -
@Strawberry 我没有注意到任何速度改进;/
标签: mysql indexing query-optimization