[英]Multiple indexing in a table mysql
我有这样的表结构
`CREATE TABLE `like_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sender_id` int(11) NOT NULL,
`receiver_id` int(11) NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `index_user` (`sender_id`,`receiver_id`))`
我已将sender_id
和receiver_id
编入索引。 如果我尝试查询这个
`Select * from like_user where sender_id = 10`
该索引工作正常,但另一方面却没有。
`Select * from like_user where receiver_id = 11`
我怎样才能使索引在这两种情况下都起作用。
用例是sender_id
是喜欢用户的人,而 sender id 喜欢的人存储在receiver_id
中。 所以如果发送者想看到他喜欢的所有用户,那么索引就可以工作,但是如果接收者id想看到哪些发送者喜欢他,索引就停止工作了。 我们如何解决它?
只能使用前缀。 后缀不能。 我认为两个单独的索引,一个由发送者和另一个由接收者,将是合理的:
CREATE TABLE `like_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sender_id` int(11) NOT NULL,
`receiver_id` int(11) NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY (`sender_id`),
KEY (`receiver_id`)
);
这些索引之一将用于每个表副本。 例如,对于
SELECT *
FROM like_user t1
JOIN like_user t2 ON t1.sender_id = t2.receiver_id;
第一个表副本 (t1) 将使用KEY (`sender_id`)
而另一个表副本将使用KEY (`receiver_id`)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.