用于从相同表中搜索的mysql存储过程
问题:用于从相同表中搜索的mysql存储过程 嗨开发人员我正在研究从许多具有相同结构的表中快速选择行的方法。表格的数据太多,无法成为 1 个表格。所以每个表都包含 1 个月的数据。例如 log_2011_01 ,log_2011_02 等。表有日期时间列created_at。 我需要创建存储过程,它必须包含 2 个日期时间参数,用于在此日期和其他几个日期之间进行搜索。 现在我看到了下一个实现:存储
·
问题:用于从相同表中搜索的mysql存储过程
嗨开发人员我正在研究从许多具有相同结构的表中快速选择行的方法。表格的数据太多,无法成为 1 个表格。所以每个表都包含 1 个月的数据。例如 log_2011_01 ,log_2011_02 等。表有日期时间列created_at
。
我需要创建存储过程,它必须包含 2 个日期时间参数,用于在此日期和其他几个日期之间进行搜索。
现在我看到了下一个实现:存储过程必须计算 2 个日期之间的表集合并生成 sql 以使用 union_all 选择数据。我想我会很重,没有准备好承受高负荷,不是吗?有没有其他的可能性来做到这一点?谢谢
解答
同意其他评论,但我试图帮助你处理 SP。此 SP 构建可以使用准备好的语句执行的查询。
-- SP definition:
DELIMITER $$
CREATE PROCEDURE iterateMonths(IN fromDate DATE, IN toDate DATE)
BEGIN
DECLARE tempDate DATE;
DECLARE query VARCHAR(1000); -- Query string, length might be increased
SET tempDate = fromDate - INTERVAL (dayofmonth(fromDate) - 1) DAY;
WHILE tempDate <= toDate
DO
IF query IS NOT NULL THEN
SET query = concat(query, '\r\nUNION ALL\r\n');
ELSE
SET query = '';
END IF;
SET query = concat(query, 'SELECT * FROM log_', DATE_FORMAT(tempDate, '%Y_%m'));
SET tempDate = tempDate + INTERVAL 1 MONTH;
END WHILE;
SELECT query; -- Output generated query
END
$$
DELIMITER ;
-- Call the SP
SET @fromDate = '2010-07-29';
SET @toDate = '2011-08-29';
CALL iterateMonths(@fromDate, @toDate);
-- Output:
SELECT * FROM log_2010_07
UNION ALL
SELECT * FROM log_2010_08
UNION ALL
SELECT * FROM log_2010_09
UNION ALL
SELECT * FROM log_2010_10
UNION ALL
SELECT * FROM log_2010_11
UNION ALL
SELECT * FROM log_2010_12
UNION ALL
SELECT * FROM log_2011_01
UNION ALL
SELECT * FROM log_2011_02
UNION ALL
SELECT * FROM log_2011_03
UNION ALL
SELECT * FROM log_2011_04
UNION ALL
SELECT * FROM log_2011_05
UNION ALL
SELECT * FROM log_2011_06
UNION ALL
SELECT * FROM log_2011_07
UNION ALL
SELECT * FROM log_2011_08
更多推荐
已为社区贡献23584条内容
所有评论(0)