在where子句中的Mysql FIND_IN_SET

时间:2013-04-25 07:42:41

标签: mysql sql

以下查询不使用索引,并且解释计划中的类型为“ALL”

EXPLAIN EXTENDED

SELECT 
  GROUP_CONCAT(CONCAT(fname,' ',lname)) 
FROM employee WHERE FIND_IN_SET(emp_id,'111582,111624')>0;

是否有任何方法可以更改查询以使用索引。

解释计划输出:

 id : 1
 select_type :SIMPLE
 table  : employee 
 type   : ALL
 possible_keys  : {null}
 key    : {null}
 key_len    : {null}
 ref    : {null}
 rows  : 546
 filtered : 100
 Extra: Using where

请建议我改进查询以使用索引。

提前致谢,

2 个答案:

答案 0 :(得分:1)

FIND_IN_SET是一个字符串函数,(在大多数情况下)将导致全表扫描......

使用:

WHERE emp_id IN (111582,111624)

答案 1 :(得分:0)

由于答案来得太晚,我也遇到了同样的要求,发现 FIND_IN_SET 仍然适用于列。 示例(1 是 emp_id)

SELECT * FROM employee WHERE FIND_IN_SET(1,comma_separated_column_name)

这是我的例子 enter image description here

查询选择周末列中包含 1 的所有行程