gpt4 book ai didi

mysql - FInd_IN_SET vs IN子句MYSQL存储过程的使用

转载 作者:行者123 更新时间:2023-11-29 01:59:54 25 4
gpt4 key购买 nike

我有一个类似于下面的存储过程

SELECT * 
FROM Table1
WHERE Tag IN (ids)

这里的 Tag 是一个 Integer 列。

我厌倦了将逗号分隔值作为字符串传递到存储过程中,但它不起作用。然后我使用如下存储过程

SELECT * 
FROM Table1
WHERE FIND_IN_SET(Tag, ids)

这非常有效,唯一的问题是我的表非常大 - 数百万行并且在运行直接 SQL 语句时使用 FIND_IN_SET 比使用 IN 花费的时间太长。

最好的性能优化选项是什么?

是否有拆分函数可以将 id 转换为整数并为 IN 子句解析它?我认为那将是最好的选择。有什么建议或想法吗?

最佳答案

你可以准备一个语句然后执行它:

set @sql = concat('select * from table1 where tag in (', ids, ')');

PREPARE q FROM @sql;

execute q;

这会为每次执行构造字符串,因此您可以使用in。生成的执行应该能够使用 tag 上的索引,这应该会大大加快速度。

关于mysql - FInd_IN_SET vs IN子句MYSQL存储过程的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17641671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com