【问题标题】:Autorunning Query in mysql for every table in database在mysql中为数据库中的每个表自动运行查询
【发布时间】:2015-07-18 14:40:18
【问题描述】:

我的数据库只包含帐户的事件历史记录。该数据库将拥有与注册帐户一样多的表,但每个表的结构都相似,因此唯一的区别仅在于表的名称。我想运行将修剪除最后 N 个值之外的其他日志的查询。

根据this question 我可以安排为单个表自动运行一些查询。

我可以对 DB 中的每个表执行相同的查询,而无需手动将其设置到每个表吗?

__

我想解释一下为什么我要制作许多表而不是一张大表——每个帐户事件日志都可以包含数百个事件。但是这个事件很少被单个帐户更改,很少选择。我真的不明白,为什么我需要通过数百万行进行选择,以防所有帐户事件只有一个表可以搜索单个帐户数据。

【问题讨论】:

  • 重新做你的数据库架构。听起来是最糟糕的方法

标签: mysql database


【解决方案1】:

您可以使用此查询来查询表名:

SELECT * FROM information_schema.tables;

阅读更多关于此here 的信息。在由 mysql 事件调度程序触发的存储过程中使用上述查询的结果应该允许您执行各种自动维护工作。

注意:

我认为您可能严重误解了关系数据库的概念。您确定每个注册帐户都需要一个自己的表格吗?这对我来说听起来很不对。

【讨论】:

  • 我的想法是:1)日志可能很大,所以我更喜欢运行专用的日志数据库以便将来对其进行分片。 2)我总是知道表的名称,所以它必须比在巨大的公共表中按帐户过滤事件要快得多
  • 我认为你尝试优化的太早了。许多表的一件事可能是每个表的索引可能大于巨大日志表的单个索引。你的方法可能是有效的,我真的不能说。但是,我建议您在遇到简洁设计的问题时开始优化。不是在那之前。
  • 对不起,但我仍然无法得到您的答复。 indormation_shema.tables 包含数据库中的所有表。我只需要从表中分离那些表模式列等于“my_schema”的表
  • 这是一个常规的 SELECT 语句。您可以随心所欲地加入和设置 WHERE 子句。您也可以在 DELETE 和 UPDATE 语句中使用它...
猜你喜欢
  • 2012-12-02
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2012-09-10
  • 2012-04-17
相关资源
最近更新 更多