【发布时间】:2016-02-24 16:45:18
【问题描述】:
这是我的桌子:
// table
+----+------+------+
| id | col1 | col2 |
+----+------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 1 |
| 7 | 3 | 2 |
| 8 | 3 | 3 |
| 9 | 3 | 4 |
| 10 | 3 | 5 |
+----+------+------+
现在我想同时搜索col1 和col2。像这样的:
select * from table where col1,col2 IN (1,2);
我想要这个输出:
+----+------+------+
| id | col1 | col2 |
+----+------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 1 |
| 7 | 3 | 2 |
+----+------+------+
好吧,我的问题在于这部分:... where col1,col2 IN (1,2)。我该如何解决?
注意:我可以这样做:... where col1 IN (1,2) or ,col2 IN (1,2)。但是这样,我必须在每列上创建两个单独的索引。虽然我想要一个需要像这样的组索引的查询:KEY NameIndex (col1, col2)
【问题讨论】:
-
试试
WHERE 1 IN (col1,col2) OR 2 IN (col1,col2) -
@GiorgosBetsos 好的 tnx,只是您的解决方案比这更好吗?
where col1 IN (1,2) or ,col2 IN (1,2)? -
使用
EXPLAIN查看我推荐的谓词是否使用您的复合索引。如果没有,那么我的建议是无用的。 -
@GiorgosBetsos 啊,我明白了,是的,我喜欢消除两个单独的单个索引!只是一件事,有一种方法可以做到这一点吗?
WHERE (col1,col2) IN (1,2)? -
我也怀疑我的建议是否有效。我认为您将需要在
col1和col2上使用两个单独的索引,因为这是您查找的本质。查看here,了解复合索引的工作原理。
标签: mysql search indexing where-clause