我当前有一个存储过程,它接受 TEXT 作为输入,然后尝试在集合中查找匹配的 id。
input_ids 值是一个长整型数组“1,2,3,...”。
它可以工作,但问题是 find_in_set 很慢,我认为必须有更好的方法。
CREATE PROCEDURE `sel_network_edges_by_id`(
IN input_ids TEXT
)
BEGIN
SELECT id, gradient, geoJson, ...
FROM network.network_edges
WHERE FIND_IN_SET(id, input_ids);
END
表格示例
id, gradient, geoJson
1, -50, [34.34....]
2, 110, [35.3345..]
3, 110, [35.3345..]
MySQL v8.0(Azure)
最佳答案
由于 FIND_IN_SET
无法使用索引,因此您应该使用带有 IN()
的准备好的语句,其中传递的字符串的值可以用作内部的数组IN()
通过串联:
CREATE PROCEDURE sel_network_edges_by_id(IN input_ids TEXT)
BEGIN
PREPARE my FROM CONCAT("SELECT id, gradient, geoJson, ...
FROM network.network_edges
WHERE id IN (,", input_ids,")");
EXECUTE my;
DEALLOCATE PREPARE my;
END
关于mysql - 比 MySQL 中的 find_in_set 更快的方法(逗号分隔的长整型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76811145/