gpt4 book ai didi

mysql - MySQL 表中的列顺序是否重要?

转载 作者:IT老高 更新时间:2023-10-28 23:45:18 42 4
gpt4 key购买 nike

在学习mysql的过程中,了解到在mysql表中添加列时可以执行如下语句:

ALTER TABLE contacts ADD email VARCHAR(60) AFTER name;

ALTER TABLE contacts ADD email VARCHAR(60) FIRST;

您希望何时执行此操作?列顺序可以用于查询优化目的吗? longblob 是否应该是优化空间消耗的最后一列?或者这些命令是否存在其他原因?

最佳答案

是的,列顺序确实很重要。但是,如果您希望进行优化,您最有可能的选择(在 90% 的情况下)是添加索引。 MySQL 官方文档只讨论了添加索引上下文中的优化(来源:Dev.MySQL.com: How MySQL Uses Indexes)。

但是对于这个问题——列顺序绝对重要。这实际上完全取决于 链式行 和内存块在 MySQL 引擎中的工作方式。引用 Martin Zahn,an Oracle-certified professional , 在一篇关于 The Secrets of Oracle Row Chaining and Migration 的文章中...

Chained rows affect us differently. Here, it depends on the data we need. If we had a row with two columns that was spread over two blocks, the query:

SELECT column1 FROM table

where column1 is in Block 1, would not cause any «table fetch continued row». It would not actually have to get column2, it would not follow the chained row all of the way out. On the other hand, if we ask for:

SELECT column2 FROM table

and column2 is in Block 2 due to row chaining, then you would in fact see a «table fetch continued row»

Mapping a MySQL Row to a Data Block

这清楚地给我们的印象是,如果我们选择 column2 多于选择 column1,那么我们应该对列重新排序以优化我们的数据库查询。

我在 HP Enterprise 论坛上找到了 2002 年的旧帖子,在搜索后至少有一百个帖子重新复制了该帖子。这里关于如何进行列排序的建议似乎与专业人士的详细解释相匹配。所以,差不多 20 年后,我不得不说:谢谢,Bill Thorsteinson!

要优化查询,请根据以下规则对列进行排序:

  • Primary key columns first.
  • Foreign key columns next.
  • Frequently-searched columns next.
  • Frequently-updated columns later.
  • Nullable columns last.
  • Least-used nullable columns after more-frequently used nullable columns.
  • Blobs in own table with few other columns.

来源:HP Forums

关于mysql - MySQL 表中的列顺序是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2111958/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com