2013-04-25 123 views
1

下面的查詢不使用索引,然後鍵入解釋計劃是「ALL」Mysql的FIND_IN_SET在where子句

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 

好心建議我提高使用索引的查詢。

由於提前,

+0

什麼是指數? – Jocelyn 2013-04-25 07:45:08

+0

而你的索引是在哪個字段? – 2013-04-25 07:45:25

+0

emp_id是索引爲 – shiva 2013-04-25 08:44:01

回答

1

FIND_IN_SET是一個字符串函數(在大多數情況下),將導致全表掃描...

用途:

WHERE emp_id IN (111582,111624) 
+1

的主鍵列,它是很好的答案。但我將111582,111624存儲在單獨的列中。 WHERE FIND_IN_SET(emp_id,comma_separated_column_name)> 0的情況如何? comma_separated_column_name - 這裏的值存儲爲1212,13224,121213 – shiva 2013-04-25 08:45:29

+0

1)在你使用的編程語言中進行字符串拆分嗎?ooor ... 2)修復你的數據庫模式,規範化數據。 – 2013-04-25 08:47:14