mysql - 在 MySql 中拥有大量 View 的后果是什么

标签 mysql database-design

我有一个 Multi-Tenancy MySQL 数据库。对于大多数情况,我在表中使用租户 ID 列来区分,但出于某些目的,拥有一个已经按租户 ID 过滤的 View 要好得多。因此,例如,我可能有一个名为“quarterly_sales_view”的 View ,但对于租户 30,我将拥有“quarterly_sales_view_30”,对于租户 51,我将拥有“quarterly_sales_view_51”。我动态地创建了这些 View ,一切都运行良好,但我们现在只有几个租户,我意识到这对数百万租户来说永远行不通。

我的问题是,对于几千、几百或几十个自定义 View ,我是否会遇到性能问题或硬性限制?

附加信息:

我正在使用需要表名(或 View 名,因为它是只读的)并对其进行操作的第 3 方工具(不成熟)。在它工作的上下文中,我不能让它访问整个 View ,所以我创建了另一个简单定义为 SELECT * FROM MasterView WHERE TenantId = 30 的 View 。我认为这是一种解决方法让工具直接在 table 上工作。幸运的是这个工具是开源的,所以我可以调整它以使用不同的方法。我只是想知道在当前方法失效之前我还有多长时间。

最佳答案

这个问题 (IMO) 中的主要关注点应该更少地关注性能,更多地关注设计。首先, View 数量不应影响性能,但是,为什么每个租户都需要一个 View ?是否无法在更通用的 View 中按 ID 简单地过滤租户。例如:

SELECT * FROM vwMyTentants WHERE TenantId = 30

无论是什么原因,您都应该重新考虑您的方法,因为它是设计气味的标志。

关于mysql - 在 MySql 中拥有大量 View 的后果是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150959/

相关文章:

java - sql中的用户高度和体重

sql - 如何设计具有修订历史的数据库?

mysql - 一对多与多对多关联设计和优势

java - Hibernate 无法初始化代理

php - 如何使这个简单的MySQL连接选择?

mysql - 如何将一个数据库模式映射到另一个数据库模式?

mysql - 使用 PHP 和 Mysql 进行库存管理

mysql - 在数据库上执行SQL触发器以限制删除/更改/创建语法错误,尽管按照以下教程进行操作,但ON在此位置无效吗?

mysql - 在 Mysql 中连接表并保留多个观察结果

关于 Facebook 等社交网络的数据库模式