我已经看到了一些有这个问题的论坛,但他们没有回答我想知道的一件事。我先解释一下我的主题:
我有一个系统,其中多个用户的每个日志都输入到数据库中(例如,登录User1,登录User2,User1进入用户管理,User2更改密码等)。所以我预计每个用户每天会有100到200个条目。现在,我在单个表中进行查看,我只需要使用UserID过滤掉。
我的问题是,哪个效率更高?我应该使用一个表还是为每个用户创建一个表?
我担心如果我使用单个表,系统可能会有一些难以过滤数千个条目。我已经阅读了一些使用多个表和一个表的优点和缺点,特别是有关更新表的信息。
我也想知道哪一个节省了更多空间?多表或单表?
答案 0 :(得分:2)
只要你在选择的字段上使用索引,就不应该有任何速度问题(虽然索引写入速度慢,所以太多都是坏事)。具有几千个条目的表对mySQL(或任何其他数据库引擎)来说都不算什么。
创建数千个表的开销要差得多 - 比如说你想对用户表中的字段进行更改 - 现在你必须更改数千个表。
我们经常搜索单个记录@ work的表有大约150,000行,并且因为我们搜索的字段已编入索引,所以搜索时间只有很短的一秒。
如果您在不使用主键的情况下选择这些记录,请在您选择的字段上创建索引,如下所示:
CREATE INDEX my_column_name ON my_table(my_column_name);
这是最基本的形式。要了解有关详情,请查看here
答案 1 :(得分:2)
我会选择一张桌子。使用userId上的索引,您应该可以轻松扩展到数百万行,几乎没有问题。
每个用户的表可能更有效,但通常设计不佳。每个用户使用一个表的问题是,它很难回答其他类型的问题,例如“谁昨天在用户管理中?”或“有多少人更改了密码?”
至于使用的存储空间 - 我会说每个用户的表可能会使用更多空间,但两个选项之间的差异应该非常小。
答案 2 :(得分:1)
我只用一张桌子。每次将用户添加到系统时,我当然不希望创建新表。你每天提到的参赛作品数量真的不是那么多数据。
此外,在表的用户列上创建索引以缩短查询时间。
答案 3 :(得分:1)
绝对是一张桌子。为应用程序创建的实体动态创建表不会扩展。此外,您需要使用变量表名创建查询,这会使调试和维护变得困难。 如果你有一个用于过滤的用户ID的索引,那么db对于数百万行来说并不是什么大问题。
答案 4 :(得分:1)
任何值得盐的数据库都会处理包含所有用户信息的单个表,而不会出汗。单个表肯定是正确的方法。
如果您使用多个表,则每次新用户注册时都需要创建一个新表。您需要为您查询的每个用户创建一个新的语句对象。这将是一个完整的混乱。
答案 5 :(得分:0)
我也会选择单人桌。当您希望为具有不同用户组(多租户)的多个客户提供服务时,您可能希望使用多个表。 否则,如果您选择多个表格,请查看此重构工具:http://www.liquibase.org/。您可以动态进行架构修改。
我想,如果您正在使用正确的索引,那么单表解决方案可以表现得足够好(并且维护将更加简单)。
答案 6 :(得分:0)
单表为PHP的$ _POST和$ _GET预准备语句带来了效率。我认为,对于中小型平台,单表就可以了。总结,从几个表到多个表将是理想的。
但是,多个表也不会造成太多破坏。但是,最好的是在一张桌子上。