FIND_IN_SET或SELECT * FROM

时间:2019-02-16 18:10:53

标签: mysql sql

我想基于一堆代码来了解选择记录的最佳方法。假设它们是诸如'4456','4008','2189','6667'等的代码。真的很重要。

我可以将这些代码粘贴到类似'4456,4008,2189,....'的字符串中,并在诸如WHERE FIND_IN_SET(。。。)等最终查询中使用它们。

或。 。

在最终查询中使用它们之前,我可以将它们存储在临时表(some_table)中,并像以下那样使用它们:WHERE code IN(从some_table中选择代码)。

什么是最佳实践,什么平均可以带来最佳性能?

注意:我将必须经历多达200次的过程。每次进行最终查询之前,都要一个一个地选择一些代码。

谢谢。

3 个答案:

答案 0 :(得分:1)

尝试select group_concat(codes) from table group by codes; 它将创建一个您喜欢的列表(4456,4008,...)

答案 1 :(得分:0)

在存储过程中使用它

SET @facilities = (SELECT GROUP_CONCAT(facility_id) FROM facility);
@stmt = CONCAT('SELECT * FROM request WHERE facility_id IN (', @facilities, ')');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

答案 2 :(得分:0)

  

我想基于一堆代码来了解选择记录的最佳方法,我可以将这些代码粘贴到一个字符串中,并在最终查询中使用它们。

数据库服务器主要处理表和列。如果您的数据最初是列表,则不要将值连接成字符串,而仅要求RDBMS对其进行解析:这将为您的应用程序和数据库带来更多工作。

相反,您可以将值作为参数传递给IN条件,例如:

SELECT * FROM mytable WHERE mycode IN (?, ?, ?, ...)

NB:在MySQL中,IN条件下的最大元素数由参数max_allowed_packet控制,该参数默认为1000。


如果您的数据最初存储在数据库表中,那么EXISTS条件就是您的朋友:

SELECT t.* 
FROM mytable t
WHERE EXISTS (SELECT 1 FROM mycodes c WHERE c.code = t.code)