SQLite - 外键比int列更有效吗?

时间:2012-11-06 16:23:39

标签: sqlite processing-efficiency space-efficiency

我有一张桌子:

  CREATE TABLE pupils (
     id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
     name TEXT, surname TEXT, address TEXT, score INTEGER
  );

其中score是百分比。

在那里使用整数值或者只是像这样的表的表的外键是否更有效?

  CREATE TABLE score (percentage INTEGER PRIMARY KEY NOT NULL);

显然,该表将填充0-100。

我的想法是,如果您有1000个学生将其保持为整数列意味着查询更快,但使用更多空间并使用外键意味着使用的空间更少,但查询速度更慢。

不确定这是否正确?

所以我想我会把它扔出去!

2 个答案:

答案 0 :(得分:2)

如果您使用FOREIGN KEY来保护score表格中的pupils值,则仍然需要在pupils中设置分数列。如果两个表中都没有列,则不能有FOREIGN KEY关系。

FOREIGN KEY的唯一优点是它允许你将score列中允许的值限制为1到100之间的整数。但是,可以使用CHECK约束来完成相同的操作。列,无需额外的表格。

如果您使用FOREIGN KEY,您的DDL将如下所示:

CREATE TABLE pupils (
 id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
 name TEXT, surname TEXT, address TEXT, score INTEGER REFERENCES score(percentage)
);

请注意,得分列仍然存在。

在这种情况下,FOREIGN KEY方法添加了一个完整的表和两个必须维护的索引。使用一个表和CHECK约束更有效。

答案 1 :(得分:1)

无需规范分数值。

这是一个值,它属于第一个表。

那会创建一个不需要的链接(到一个整数),这不会真正影响每个说法的性能,但它会影响可读性。