我现在到了我需要设计我的数据库(Oracle)的项目的这一点。通常对于状态和国家表,我不使用数字主键,例如
STATUS (max 6)
AC --> Active
DE --> Deleted
COUNTRIES (total 30)
UK --> United Kingdom
IT --> Italy
GR --> Greece
这些表是静态的,不会通过应用程序更新,并且预计将来不会更改,因此在将这些值用作外键的表中不会出现更新问题。
应用程序的主表将使用状态和国家(不止一次,例如来源国、目的地国),预计每年将增加 600000 行
所以我的问题是,在查询 3 个表的连接时,这些 VARCHAR(2) 键是否会对性能产生影响。第一个会比第二个慢很多吗?
SELECT m.*,
s.status_name,
c.country_name
FROM main m, status s, countries c
WHERE m.status_cd = s.status_cd
AND m.country_cd = c.country_cd
AND m.status_cd = 'AC'
AND m.country_cd = 'UK'
SELECT m.*,
s.status_name,
c.country_name
FROM main m, status s, countries c
WHERE m.status_cd = s.status_cd
AND m.country_cd = c.country_cd
AND m.status_cd = 1
AND m.country_cd = 2
澄清:
状态不是二进制的(表名旁边的“max 6”)。这些值可能是:
* active
* deleted
* draft
* send
* replaced
我们需要向用户显示解码后的值,所以我们需要名称。