繁体   English   中英

MySQL的速度:具有多个列的表或使用联接的2个表

[英]Mysql speed: table with many columns or 2 tables using a join

我尝试搜索此内容,但除了设计选择之外,找不到任何其他内容。

所以我的问题就像标题一样。 什么更快? 用多个列创建1个表,或使用连接创建2或3个(多对多)表。

我喜欢有多个表的想法,所以数据是分开的。 大多数情况下,对于许多喜欢的数据。 但是我的朋友告诉我,用布尔值创建5列就可以了。 但是我喜欢这样的想法:有一个带有设置的表,然后是一个位于user.id和setting.id之间的表。 但是我的问题也是,它对查询有影响吗?

例:

Users
- id
- Email
- SettingA
- SettingB
- SettingC

或示例:

Uers
- id
- email
Users_Settings
- user_id
- setting_id
Settings
- id
- someSettingsValue

Mysql查询数据会更快吗? (为用户检索设置)

与单个表字段相比,仅2 r 3之间的连接将花费时间。

这与选择具有多个列的单个表或选择多个表无关。 关于规范化。

根据您提供的模式,如果所有用户将始终具有三个设置,即设置A,B和C,则最好使用包含这三列的设置来创建单个表。

users table:
    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | id       | int(11)      | NO   | PRI | NULL    | auto_increment |
    | Email    | varchar(128) | NO   |     | NULL    |                |
    | SettingA | tinyint(1)   | NO   |     | NULL    |                |
    | SettingB | tinyint(1)   | NO   |     | NULL    |                |
    | SettingC | tinyint(1)   | NO   |     | NULL    |                |
    +----------+--------------+------+-----+---------+----------------+

但是,如果保存的任何设置为null,则最好是为设置创建单独的表,然后再创建一个数据透视表以保持用户的设置而无需主键。

users table:
    +-------+--------------+------+-----+---------+----------------+
    | Field | Type         | Null | Key | Default | Extra          |
    +-------+--------------+------+-----+---------+----------------+
    | id    | int(11)      | NO   | PRI | NULL    | auto_increment |
    | Email | varchar(128) | NO   |     | NULL    |                |
    +-------+--------------+------+-----+---------+----------------+

settings table:
    +---------------+------------+------+-----+---------+----------------+
    | Field         | Type       | Null | Key | Default | Extra          |
    +---------------+------------+------+-----+---------+----------------+
    | id            | int(11)    | NO   | PRI | NULL    | auto_increment |
    | setting_value | tinyint(1) | NO   |     | NULL    |                |
    +---------------+------------+------+-----+---------+----------------+

setting_user pivot table:
    +------------+---------+------+-----+---------+-------+
    | Field      | Type    | Null | Key | Default | Extra |
    +------------+---------+------+-----+---------+-------+
    | setting_id | int(11) | NO   |     | NULL    |       |
    | user_id    | int(11) | NO   |     | NULL    |       |
    +------------+---------+------+-----+---------+-------+

其中setting_user是数据透视表。

创建模式时,还要考虑一件事,即,在扩展应用程序时,总会有三个设置,或者将来会有更多设置!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM