繁体   English   中英

表mysql中的多个索引

[英]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_idreceiver_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM