mysql缓存结果?

t9aqgxwy  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(300)

我在mysql数据库中有这样的程序。它的工作原理很奇怪。如您所见,这个过程有两个输入参数,它们总是不同的。因此,结果也应该有所不同。但mysql似乎在缓存变量或其他东西。当我用不同的输入值运行过程时,我总是看到相同的数据。是否可以仅为当前过程启用缓存?我真的很困惑,需要建议。

PROCEDURE MY_PROCEDURE(
  IN START_DATE VARCHAR(19),
  IN END_DATE VARCHAR(19)
)
BEGIN
  SET GLOBAL group_concat_max_len=18446744073709551615;

  SET @START_DATE := START_DATE ;
  SET @END_DATE:= END_DATE;

  SET @IDS_TABLE_1 = (
    SELECT GROUP_CONCAT(POSITION_ID)
    FROM TABLE_1
    WHERE
      DATE_TIME BETWEEN  @START_DATE AND @END_DATE
  );

  SET @SELECT = CONCAT("
    SELECT *
    FROM TABLE_2
    WHERE
      C.ID_OBJECT NOT IN  (@IDS_TABLE_1)
  ")

   PREPARE FINAL_SELECT FROM @SELECT;
   EXECUTE FINAL_SELECT;
   DEALLOCATE PREPARE FINAL_SELECT;
END
1sbrub3j

1sbrub3j1#

为什么要为此使用动态sql?只要做:

SELECT t2.*
FROM TABLE_2 t2
WHERE NOT EXISTS (SELECT 1
                  FROM TABLE_1 t1
                  WHERE t1.DATE_TIME BETWEEN @START_DATE AND @END_DATE AND
                        t2.ID_OBJECT = t1.POSITION_ID
                 );

带索引的 TABLE_1(POSITION_ID, DATE_TIME) ,这也应该有很好的表现。

相关问题