我有我在哪里传递为用逗号分隔MEDIUMTEXT场替代计划FIND_IN_SET可以使用索引
对于检查号码清单,如果我的参数匹配在我的存储过程,我使用FIND_IN_SET作为我的SQL存储过程如下
SELECT SQL_CALC_FOUND_ROWS f1,f2,f3,f4 FROM `mytable`
WHERE FIND_IN_SET(f2,'1,2,4,5,6,6,7,8,8,4,9,7.......................') > 0
ORDER BY f1 DESC
LIMIT 25 OFFSET 0
;
SELECT FOUND_ROWS();
现在的问题FIND_IN_SET后来我发现是,由于这我查询花费太长时间才能完成它不使用索引。 请在查询中建议任何改进
P.S.
以下是我的完整的存储过程(包括如下答案建议中的更改)
DECLARE _calculated_offset INT;
SET _calculated_offset = _limit * (_pageNumber -1);
IF _calculated_offset < 0 THEN
SET _calculated_offset = 0;
END IF;
/*SELECT SQL_CALC_FOUND_ROWS f1,f2,f3,f4 FROM `mytable`
WHERE FIND_IN_SET(f1,_telcoIdList) > 0
AND FIND_IN_SET(f2,_msisdnList) > 0
ORDER BY f3 DESC
LIMIT _limit OFFSET _calculated_offset
;
SELECT FOUND_ROWS();*/
SET @query = CONCAT('SELECT SQL_CALC_FOUND_ROWS f1,f2,f3,f4
FROM `mytable`
WHERE f1 in (',_telcoIdList,')
AND f2 in (',_msisdnList,')
ORDER BY f3 DESC
LIMIT ', _limit,' OFFSET ',_calculated_offset,' ;
SELECT FOUND_ROWS();
');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
你为什么用'SQL_CALC_FOUND_ROWS'订购..还是有缺失的逗号? ? – Arth
@Arth请阅读https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows – Akhil
@Akhil,我知道它是什么..只是想知道为什么你会'订购BY' it ..它目前别名为'f1' – Arth