如何在多列中搜索?

时间:2015-11-22 15:24:35

标签: mysql search indexing where-clause

这是我的表:

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

1 个答案:

答案 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 - 这可能是许多脱节评论中最好的摘要。)