具体来说,我想知道是否应该将所有固定长度字段(如 int、timestamp、char)放在 CREATE TABLE 的开头,并将所有可变长度varchar
放在末尾。
另外,我想知道TEXT
字段是否有不同的处理方式。
根据 RDBMS 存储引擎,它可能会在内部重新排序字段以进行存储和显示。如果我们从C程序的角度来看这个问题,数据库中的表就像一个C结构体。例如,ac 程序中的表可能如下所示:
typedef struct _Table {
char type, /* 1 byte */
int id, /* 4 bytes */
char *name; /* 4 bytes */
char city[25]; /* 25 bytes */
} Table; /* 34 bytes total */
Run Code Online (Sandbox Code Playgroud)
您可以看到,在您的程序中,您将期望第一个结构元素位于第一个指针位置,然后一个字节将是您的第二个元素位置,等等......这些称为偏移量。
您的 RDBMS 可能会将文件数据结构存储在 ac 样式结构中,以便它可以了解每行数据的偏移量(内存位置)。然后将应用索引来在相似的行组中进行搜索。索引位置只是指向每个匹配行(或结构)的第一个字节的指针。
作为软件工程师类型,您可能希望打包结构,以便最小的数据类型位于结构的开头,以便当您的指针算术扫描它们时,您会更快地找到结论,但这是一个设计决策。
最重要的是,最佳实践是按照从最小到最大的顺序设计模型,但无论如何它可能会根据存储引擎的要求进行重新组织。