mysql - 数据库,每个用户一张表还是一张大表?

标签 mysql sql database sqlite

我刚开始学习数据库,在设计数据库的时候,我注意到很多建议,比如this thread ,建议不要每个用户使用一个表,而是将所有数据保存在一个大表中,并在需要时进行查询。但是我还是不明白,因为似乎在很多情况下,每个用户一张表似乎效率更高。

假设我有一个包含 10,000 个客户的数据库,供他们跟踪他们的订单。每个客户的订单很少,大约 10 个。这样,每个客户登录时,您都必须通过一个大表来为该客户获取数据,但是,如果您为每个用户保留每个表,您可以直接得到客户需要的东西。

另一个例子,一个餐厅信息系统跟踪所有餐厅的菜单(比如,在 [foodname, price] 对),因为每个餐厅都有不同数量的菜肴,你不能真的把每个菜单放在一行中,你可以只制作一个包含 [foodname,price,restaurant] 行的大表。但是餐厅很多,当用户需要某家餐厅的菜单时,需要遍历所有餐厅的数据,效率很低。

对于这两个示例,如果我不想为每个用户创建每个表,我想不出设计数据库的好方法。所以我的问题是: 如果我们想避免每个用户每个表的设计,我们应该如何为这种情况设计数据库?

最佳答案

Sql 数据库专为您建议的场景类型而设计。他们可以非常有效地处理数百万或数十亿行。尝试将每个客户划分到一个单独的表中的复杂性非常大。

您唯一需要担心的是您的表上有索引,这样您就不必扫描那十亿条记录来找到适用于您客户的记录。

一旦索引就位,那么您的所有示例场景都将成为简单高效的查询。

关于mysql - 数据库,每个用户一张表还是一张大表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52359862/

相关文章:

php - mysql 查询错误没有重复 - 但如何让它跳过错误并继续执行其他错误?

sql - 将 Oracle 日期转换为 RFC 3339 格式

database-design - Google 通讯录地址簿架构 - 如何拥有 1 到多个数据字段?

python - Django + Heroku 数据库

php - 你如何从 PHP 脚本中区分 MariaDB 和 MySQL?

mysql - 提取存储在 MySQL 字段中的第三级文件夹结构

mysql - 无法使用从 CakePHP 2 中的查询获得的变量从数据库检索结果

c# - 通过Visual Studio 2010 C#访问sql 2008数据库

php - 插入到选择中仅在初始运行时插入一行,但之后每次都很好

mysql - SQL 服务器 openquery - "Key column information is insufficient or incorrect. Too many rows were affected by update."