【问题标题】:Check for performance for single vs two user tables for different type of users in mysql检查 mysql 中不同类型用户的单个用户表和两个用户表的性能
【发布时间】:2016-02-25 10:43:21
【问题描述】:

我有一种情况,我需要为两种类型的用户设计数据库,比如说 TYPE1 和 TYPE2。 TYPE1 用户是一般用户,将有数百万用户,TYPE2 用户是某种专业的,记录量将受到限制。

我为他们两个制作了一个名为 users 的公用表。现在的情况是,如果我想按城市搜索一组专业人士,就绩效而言,哪种方法最适合?

案例 1:为用户提供一个表(这实际上有助于提高可扩展性)
案例 2:两种类型的用户都有两个单独的表

【问题讨论】:

  • 在一个、两个或 20 个表中拥有信息并不会影响 MySQL 在后台所做的工作(它非常有效地多路复用写入 HDD)。如果您认为在 单个服务器 上将某些内容拆分到多个表中有助于提高性能,那您就错了。这就是为什么您总是以可以轻松查询、添加信息或推断信息的方式设计数据库。这意味着 1 表是要走的路。
  • @Mjh 这不是它的保存方式,而是它如何查询数据库。我的意思是假设我在 DB 中有 500 万条记录,有 10 万 TYPE2 用户,我正在为 TYPE2 用户查询一些东西,你不认为 MySQL 会检查所有 500 万条记录来检查该行是否用于 TYPE2 吗?不会影响性能吗?
  • 即使您有 1 亿条记录,也不是很多数据。如果您查询数据库以询问有多少特定类型的用户,那么它将遍历整个表。如果您使用类型和用户名查询表,那么您可以索引用户名。登录的用户,您可以通过使用主键获取有关他们的信息。不要因为过早的优化而让你的生活变得悲惨。
  • 如果两种类型的大部分列相似,则使用一张表。

标签: mysql performance optimization normalization execution


【解决方案1】:

显然它将为user 提供一个表。

再添加一列TYPE(TINYINT(1)),它的值可以是1(type 1)2(type 2),其作用类似于区分用户的标志。

标志的数据类型

根据 MySQL 手册,您可以使用 bool 和 boolean,它们是 目前 tinyint(1) 的别名

所以你可以根据TYPE的值查询获取特定类型的用户。

所以TYPE这个列可以

`TYPE` tinyint(1) unsigned NOT NULL DEFAULT '0' 

这会给您带来更好的性能。

希望这会有所帮助。

【讨论】:

  • 我也想要单表,但是搜索将在 TYPE2 用户上进行,与 TYPE1 用户相比,该用户要少得多。您认为这会影响性能吗?
  • 不,我不这么认为,但是将该字段设置为TINY INT.. 这会提高性能..
  • ENUM 也是一种优秀的数据类型,它避免了用户在“type1”和“1”之间进行转换。
猜你喜欢
  • 2020-05-23
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
相关资源
最近更新 更多