【问题标题】:MYSQL speed of this query and optimized table structure此查询的MYSQL速度和优化的表结构
【发布时间】:2010-12-27 21:05:22
【问题描述】:

我需要构建一个新的表系统,它将存储一个 id 和每个 id 10 varchars(255)。这就是它需要存储的全部内容。除了明显的仅对整行进行插入/删除/更新之外,将运行的唯一其他查询是SELECT * FROM table WHERE id='id'。 700 万条记录。

我想出了两个结构,它们是:

(1) - 单表,id,然后是 10 varchars,没有连接,没什么花哨的,id 是主键,简单的select *

(2) - 2 个表,第一个有 id,然后是 10 个整数元素,第二个有 integer(auto increment)varchars。这将使用连接。因此,我猜每个查询有 10 个连接。

显然2作为形式结构和以后的表结构变化更好,但是,就单独查询的SPEED而言,哪个更好?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果您将始终准确地存储 10 VARCHAR 字段并且每个 VARCHAR 都有其自己的含义(就像它始终是一个名称,或者始终是一个地址等),那么只需创建一个带有 10 的表字段。

    您的第二个解决方案称为EAV (entity-attribute-value),它主要用于稀疏矩阵(当您有很多可能的属性而只有少数属性为给定实体设置时)。它具有可扩展性和可维护性,但对于像您这样的查询效率较低。

    【讨论】:

    • @David:第一个(所有值都在一行中)。 EAV 描述中的“效率较低”意味着“慢”:)
    【解决方案2】:

    当然在速度方面第一个更好。在大表上连接真的很慢

    【讨论】:

    • 请确认“在大桌子上连接真的很慢”。我索引 table1 上的 id 列和 table2 上的整数列
    • 如果您想象连接中发生的事情,就很清楚为什么它们在大表中很慢。
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2019-08-30
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多