我是一名经验丰富的PHP开发人员,他的任务是使用Oracle数据库。
我注意到的第一件事是这些表似乎没有像我以前在MySQL中看到的自动编号索引。相反,他们似乎在两个领域中创建了一个索引。
例如,我注意到其中一个索引是Date Field和外键ID字段的组合。 “日期”字段似乎存储了整个日期和时间戳,因此组合非常独特。
如果索引名称是PLAYER_TABLE_IDX,我将如何在我的PHP代码中使用此索引?
我想通过这个索引引用一个唯一的记录(而不是在我的SQL查询的WHERE部分中使用两个AND子句)
任何建议Oracle / PHP大师?
答案 0 :(得分:12)
我想通过这个索引引用一个唯一的记录(而不是在我的SQL查询的WHERE部分中使用两个AND子句)
您无法使用复合主键中的所有列来引用唯一行。
您无法在SQL查询中直接使用索引 在Oracle中,您使用hint syntax来建议应该使用的索引,但是希望使用索引的唯一方法是在SELECT,JOIN,WHERE和ORDER中指定与其关联的列。 BY条款。
我注意到的第一件事是这些表似乎没有像我以前在MySQL中看到的自动编号索引。
Oracle(和PostgreSQL)拥有所谓的“序列”。它们是表中的独立对象,但用于与MySQL的auto_increment类似的功能。与MySQL的auto_increment不同,每个表可以使用多个序列(它们从不关联),并且可以单独控制每个序列。
相反,他们似乎在两个字段中创建了一个索引。
表格设计就是这样,没有特别针对它的Oracle。
但我认为现在是时候解决一个索引在数据库中的含义与你使用该术语的方式不同。索引是一个额外的步骤,可以更快地从表中选择数据(但由于维护它们会使INSERT / UPDATE / DELETE变慢)。
你所说的实际上被称为主键,在这个例子中它被称为复合键,因为它涉及多个列。其中一个列(DATE(认为是DATETIME)或外键)在这种情况下可能有重复。但由于密钥基于两列,因此两个值的组合使它们成为表中唯一记录的关键。
答案 1 :(得分:1)
http://use-the-index-luke.com/是我的Web-Book,解释了如何在Oracle中使用索引。
这对你的问题来说太过分了,但如果你想了解事情是如何运作的,那么它可能值得一读。