这是我的表:
// 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)
答案 0 :(得分:2)
你想要这个,对吗?
WHERE col1 IN (1,2)
OR col2 IN (1,2)
如果有,请将OR
转换为UNION
。 (这是一种常见的优化技巧。)
( SELECT ... WHERE col1 IN (1,2) )
UNION DISTINCT -- since there are likely to be dups
( SELECT ... WHERE col2 IN (1,2) );
并为每个SELECT
提供最佳索引:
INDEX(col1),
INDEX(col2)
这两列的复合索引不就足够了。
(Appology - 这可能是许多脱节评论中最好的摘要。)