如何在多列中搜索?

How to search in multiple columns?

这是我的 table:

// 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    |
+----+------+------+

现在我想在 col1col2 中搜索。像这样:

 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 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)

这两列的复合索引 不够。

(Appologies -- 这可能是许多杂乱无章的评论中最好的总结。)