2

我是一名几乎没有 Oracle 经验的 PHP 开发人员,负责使用 Oracle 数据库。

我注意到的第一件事是,这些表似乎没有我习惯在 MySQL 中看到的自动编号索引。相反,他们似乎从两个字段中创建了一个索引。

例如,我注意到其中一个索引是日期字段和外键 ID 字段的组合。日期字段似乎存储了整个日期和时间戳,因此组合相当独特。

如果索引名称是 PLAYER_TABLE_IDX 我将如何在我的 PHP 代码中使用这个索引?

我想通过这个索引引用一个唯一的记录(而不是在我的 SQL 查询的 WHERE 部分中使用两个 AND 子句)

任何建议 Oracle/PHP 专家?

4

2 回答 2

12

我想通过这个索引引用一个唯一的记录(而不是在我的 SQL 查询的 WHERE 部分中使用两个 AND 子句)

您必须使用复合主键中的所有列的引用来获得唯一的行,这是没有办法的。

您不能直接在 SQL 查询中使用索引。
在 Oracle 中,您使用提示语法来建议应该使用的索引,但希望使用索引的唯一方法是在 SELECT、JOIN、WHERE 和 ORDER BY 子句中指定与其关联的列。

我注意到的第一件事是,这些表似乎没有我习惯在 MySQL 中看到的自动编号索引。

Oracle(和 PostgreSQL)有所谓的“序列”。它们是与表分离的对象,但用于类似于 MySQL 的 auto_increment 的功能。与 MySQL 的 auto_increment 不同,每个表可以使用多个序列(它们从不关联),并且可以单独控制每个序列。

相反,他们似乎从两个字段中创建了一个索引。

这就是表的设计,没有什么特别是 Oracle 的。

但我认为是时候解决索引在数据库中的含义与您使用该术语的方式不同的问题了。索引是使从表中选择数据更快的附加步骤(但由于维护它们而使 INSERT/UPDATE/DELETE 变慢)。

您所说的实际上称为主键,在此示例中,它被称为复合键,因为它涉及多个列。在这种情况下,其中一列,无论是 DATE(考虑为 DATETIME)还是外键,都可以有重复项。但由于键基于两列,因此这两个值的组合使它们成为表中唯一记录的键。

于 2010-09-23T01:46:43.213 回答
1

http://use-the-index-luke.com/是我的网络书,它解释了如何在 Oracle 中使用索引。

这对您的问题来说有点过头了,但是,如果您想了解事情的运作方式,它可能值得一读。

于 2010-09-23T06:12:54.213 回答