Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有什么理由担心表中的列顺序吗?_Mysql_Sql_Database Table - Fatal编程技术网

Mysql 有什么理由担心表中的列顺序吗?

Mysql 有什么理由担心表中的列顺序吗?,mysql,sql,database-table,Mysql,Sql,Database Table,我知道你可以用FIRST和AFTER来改变MySQL中的列顺序,但是你为什么要麻烦呢?既然好的查询在插入数据时会显式地命名列,那么真的有理由关心列在表中的顺序吗 否,SQL数据库表中列的顺序完全不相关-除了显示/打印目的。对列重新排序没有意义——大多数系统甚至没有提供这样做的方法(除了删除旧表并使用新的列顺序重新创建它) 马克 编辑:从关系数据库的Wikipedia条目中,以下是相关部分,对我来说,它清楚地表明列顺序永远不应该引起关注: 关系定义为一组n元组。在数学和关系数据库模型中,集合是一个

我知道你可以用FIRST和AFTER来改变MySQL中的列顺序,但是你为什么要麻烦呢?既然好的查询在插入数据时会显式地命名列,那么真的有理由关心列在表中的顺序吗

否,SQL数据库表中列的顺序完全不相关-除了显示/打印目的。对列重新排序没有意义——大多数系统甚至没有提供这样做的方法(除了删除旧表并使用新的列顺序重新创建它)

马克

编辑:从关系数据库的Wikipedia条目中,以下是相关部分,对我来说,它清楚地表明列顺序永远不应该引起关注:


关系定义为一组n元组。在数学和关系数据库模型中,集合是一个无序的项集合,尽管有些数据库管理系统对它们的数据进行了排序。在数学中,元组有一个顺序,允许重复。E.F.Codd最初使用这个数学定义定义元组。后来,E.F.Codd的一个伟大见解是,在基于关系的计算机语言中,使用属性名而不是排序将更加方便(一般而言)。这一观点至今仍在使用

否,SQL数据库表中列的顺序完全不相关-除了显示/打印目的。对列重新排序没有意义——大多数系统甚至没有提供这样做的方法(除了删除旧表并使用新的列顺序重新创建它)

马克

编辑:从关系数据库的Wikipedia条目中,以下是相关部分,对我来说,它清楚地表明列顺序永远不应该引起关注:


关系定义为一组n元组。在数学和关系数据库模型中,集合是一个无序的项集合,尽管有些数据库管理系统对它们的数据进行了排序。在数学中,元组有一个顺序,允许重复。E.F.Codd最初使用这个数学定义定义元组。后来,E.F.Codd的一个伟大见解是,在基于关系的计算机语言中,使用属性名而不是排序将更加方便(一般而言)。这一观点至今仍在使用

必须键入时输出的可读性:

select * from <table>
从中选择*
在您的数据库管理软件中


这是一个非常虚假的原因,但目前我想不出任何其他原因。

必须键入时输出的可读性:

select * from <table>
从中选择*
在您的数据库管理软件中


这是一个非常虚假的原因,但目前我想不出任何其他原因。

一些写得不好的应用程序可能依赖于列顺序/索引,而不是列名。他们不应该这样,但确实发生了。更改列的顺序会破坏此类应用程序。

一些编写不好的应用程序可能依赖于列顺序/索引,而不是列名。他们不应该这样,但确实发生了。更改列的顺序会破坏此类应用程序。

您唯一需要担心列顺序的时候是您的软件是否特别依赖该顺序。通常这是因为开发人员变得懒惰,做了一个
选择*
,然后在结果中按索引而不是按名称引用列。

您唯一需要担心列顺序的时候是您的软件是否特别依赖该顺序。通常这是因为开发人员变得懒惰,做了一个
选择*
,然后在结果中按索引而不是按名称引用列。

列顺序对我调整过的一些数据库(包括Sql Server、Oracle和MySQL)的性能有很大影响。该职位有:

  • 首先是主键列
  • 接下来是外键列
  • 下一个经常搜索的列
  • 以后经常更新专栏
  • 可为空的列最后一个
  • 在使用频率较高的可空列之后使用最少的可空列
性能差异的一个例子是索引查找。数据库引擎根据索引中的某些条件查找行,并返回行地址。现在,假设您正在寻找某个值,它位于下表中:

 SomeId int,
 SomeString varchar(100),
 SomeValue int
引擎必须猜测SomeValue的起始位置,因为SomeString的长度未知。但是,如果您将订单更改为:

 SomeId int,
 SomeValue int,
 SomeString varchar(100)
现在,引擎知道可以在行的开头4个字节后找到SomeValue。因此,列顺序会对性能产生相当大的影响


编辑:Sql Server 2005在行的开头存储固定长度的字段。每行都有一个varchar开头的引用。这完全否定了我上面列出的效果。因此,对于最近的数据库,列顺序不再有任何影响。

列顺序对我所调优的一些数据库(包括Sql Server、Oracle和MySQL)的性能有很大影响。该职位有:

  • 首先是主键列
  • 接下来是外键列
  • 下一个经常搜索的列
  • 以后经常更新专栏
  • 可为空的列最后一个
  • 在使用频率较高的可空列之后使用最少的可空列
性能差异的一个例子是索引查找。数据库引擎根据索引中的某些条件查找行,并返回行地址。现在,假设您正在寻找某个值,它位于下表中:

 SomeId int,
 SomeString varchar(100),
 SomeValue int
引擎必须猜测SomeValue的起始位置,因为SomeString的长度未知。但是,如果您将订单更改为:

 SomeId int,
 SomeValue int,
 SomeString varchar(100)
现在,引擎知道可以在行的开头4个字节后找到SomeValue。因此,列顺序会对性能产生相当大的影响

编辑:Sql Server 2